• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts




Re: PIC程式語法 新手疑惑?
版主
版主


MPASM 語法裡有關 LABEL 的語法有三種 :

1. 字尾加冒號 --> Delay:
2. 字尾不加冒號 --> Delay
3. LABLE單獨為一行

因為用 SWAPF 指令不會影響到 Z 旗號,如用 MOVF 是很簡單但 Z 旗號會被影響到。

發表於: 2005/1/19 11:53
頂部


PIC程式語法 新手疑惑?
初級會員
初級會員


最近在學PIC 有一些地方不懂
請知道的人 跟我說一下 謝謝~~

問題1

有些LABEL之後有:有的卻沒有這是為何?
差別在哪?
我試過不管有沒:build都沒問題耶~~~@@
例如
a_d_convert:
bsf ADCON0,GO
call delay_500us
a_d_wait nop
btfss PIR1,ADIF
goto a_d_wait

bcf PIR1,ADIF
movf ADRESH,W
return

上述程式a_d_convert: 就有:而a_d_wait就沒有 ????


第2個問題是在w100裡面的ex10程式
有一段
swapf STATUS,W <======
movwf flag_temp
call a_d_convert
call low_adjust
call delay_200ms
swapf flag_temp,W <========
movwf STATUS
goto test_rb0

於箭頭的地方為何程式要使用swapf將STATUS值高
低交換後丟到flag_temp之後 又在下方將flag_temp使
用swapf交換後又丟回STATUS??WHY~~~~~
不懂它的用意在哪耶

發表於: 2005/1/19 11:41
頂部


關於燒錄的問題
高級會員
高級會員


我現在使用PIC18F6520
是透過ICD2直接連接模擬板,底下是我的流程
程式OK-->program target device-->run
如果我要把我的程式燒到pic裡面,

當program target device之後,可以不用透過icd2就可以動作嗎?

program target device就是把程式燒到pic裡面嗎?

還是要再買燒錄的硬體裝置才可以燒錄,如果這樣,當燒錄好,接上pic的電源,和震盪器之後,還有什麼要接才可以正常動作呢?

以上三個問題困擾我很久,不知有可參考的資料還是,可以麻煩各位大大,辛苦一點跟我說一下呢,
謝謝歐


發表於: 2005/1/19 9:59
頂部


Re: 張貼程式碼時,保持原有空白字元,使格式不會亂掉的方式
資深會員
資深會員


針對如何把使用 〔code〕所貼的程式碼正確複製下來的問題,上次提出的方法要用到 ultraedit 作搜尋替代,較為繁複,現在則有新的發現:

《只要改用 FireFox ,問題就自動解決了!!》

在 FireFox 中來開網頁並進行剪貼複製,就可以保留程式碼的正確格式,貼到任何編輯器中都沒問題。

Firefox 是前一陣子造成轟動的新生代瀏覽器,聲勢直逼 Internet Explorer,目前版本為 1.0,台灣主網在 http://www.moztw.org ,首頁上就有下載連結。

更新:目前最新版本為 1.0.1(安全更新)

發表於: 2005/1/19 9:40
頂部


请问间接寻址(FSR)功能在PICC中怎么实现??
新會員
新會員


各位大大:
在组合程式中上电初始化及睡眠叫醒时都要将芯片中所有RAM的内容清0,汇编中可以用FSR+INDF清除,但在PICC中怎么实现此功能??例如要将16F877的Bank0共96个RAM全部清0

發表於: 2005/1/19 9:06
頂部


Re: LCD顯示
資深會員
資深會員


參照:

cct1210 寫道:
...文中提到
<只要那四條 data 線在同一個 PORT 就好,其他三條可以隨意變更,把 LCD.C 改幾行就好。>
請教一下,要如何修改LCD.C,使得其他三條可以隨意變更?



這兩天剛測過

#include <18F452.H>
#fuses HS, NOPROTECT, NOWDT, NODEBUG, NOLVP, PUT
#use delay(clock=20000000)
#use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7)

#include <xie_lcd.c>

void main( )
{
int8 x=0;

delay_ms(500);
set_adc_ports( NO_ANALOGS );
set_adc( ADC_OFF );
delay_ms(500);

lcd_init();

printf("\r\nHello world !");
printf(lcd_putc,"Hello world ! ");

while(1)
{
lcd_gotoxy(1,2); printf(lcd_putc,"x = %u ",x);

printf("%u ",x++); delay_ms(500); output_toggle(PIN_A4);
}
}

LCD 驅動程式

// xie_lcd.c

// LCD_pin Wu Xie
// --------------------------
// D4 B4 RA0
// D5 B5 RA1
// D6 B6 RA2
// D7 B7 RA3
// -- -- RA4 System LED always output
// enable A5 RA5
// rw B2 RC0
// rs B1 RC5
// --------------------------

int1 lcd_fail = TRUE; // 2004/02/28 新增

struct { int8 data : 4; // Wu
int8 unused: 2;
} lcd;
#byte lcd = 0xF80 // PORTA

#bit lcd_enable = 0xF80.5 // PORTA.5 for lcd_enable
#bit lcd_rw = 0xF8B.0 // LATC.0
#bit lcd_rs = 0xF8B.5 // LATC.5

#bit tris_lcd_enable= 0xF92.5 // TRISA5
#bit tris_lcd_rw = 0xF94.0 // TRISC0
#bit tris_lcd_rs = 0xF94.5 // TRISC5

void set_tris_to_read_lcd(void)
{
set_tris_a(0b11001111);
tris_lcd_rw = 0;
tris_lcd_rs = 0;
}

void set_tris_to_write_lcd(void)
{
set_tris_a(0b11000000);
tris_lcd_rw = 0;
tris_lcd_rs = 0;
}


#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the second line

// The following bytes need to be sent to the LCD to start it up.
int8 const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};

int8 lcd_read_byte()
{
int8 low,high;

set_tris_to_read_lcd(); // set_tris_b(LCD_READ); Wu

lcd_rw = 1;
delay_cycles(1);
lcd_enable = 1; // lcd.enable = 1; Wu
delay_cycles(1);
high = lcd.data;
lcd_enable = 0;
delay_cycles(1);
lcd_enable = 1;
delay_us(1);
low = lcd.data;
lcd_enable = 0;

set_tris_to_write_lcd(); // set_tris_b(LCD_WRITE); Wu

return( (high<<4) | low);
}


void lcd_send_nibble( int8 n )
{
lcd.data = n;
delay_cycles(1);
lcd_enable = 1;
delay_us(2);
lcd_enable = 0;
}


void lcd_send_byte( int8 address, int8 n )
{
int8 i = 250; // 2004/02/28

set_tris_to_write_lcd(); // set_tris_lcd(LCD_WRITE); // Wu, 2003/07/03

lcd_rs = 0;
while ( bit_test(lcd_read_byte(),7) )
{
delay_us ( 6 ); // 2004/02/28

if ( --i == 0 )
{
lcd_fail = TRUE; // 2004/02/28
break;
}
}
lcd_rs = address;
delay_cycles(1);
lcd_rw = 0;
delay_cycles(1);
lcd_enable = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
// return i; // return '0' if failed to initialize LCD
}

void lcd_init()
{
int8 i;

lcd_fail = FALSE; // 2004/02/28

tris_lcd_enable = 0; // set as output, Wu

set_tris_to_write_lcd(); // set_tris_b(LCD_WRITE); Wu

lcd_rs = 0;
lcd_rw = 0;
lcd_enable = 0; delay_ms(30);
for(i=1;i<=3;++i) { lcd_send_nibble(3); delay_ms( 10); }
lcd_send_nibble(2);
for(i=0;i<=3;++i) lcd_send_byte(0,LCD_INIT_STRING[i]);
}

void lcd_gotoxy( int8 x, int8 y)
{
int8 address;

if(y!=1) address=lcd_line_two;
else address=0;
address+=x-1;
lcd_send_byte(0,0x80|address);
}

void lcd_putc( char c)
{
if ( !lcd_fail ) // 2004/02/28
{
switch (c) {
case '\f' : lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n' : lcd_gotoxy(1,2); break;
case '\b' : lcd_send_byte(0,0x10); break;
default : lcd_send_byte(1,c); break;
}
}
}

char lcd_getc( int8 x, int8 y)
{
char value;

lcd_gotoxy(x,y);
lcd_rs=1;
value = lcd_read_byte();
lcd_rs=0;
return(value);
}

void lcd_cursor_mode(int8 x, y, int1 cursor_display_on, char_blink_on) // Wu
{
int8 display_mode = 0x0C;
if (cursor_display_on) bit_set(display_mode, 1);
if (char_blink_on) bit_set(display_mode, 0);
lcd_gotoxy(x,y);
lcd_send_byte(0, display_mode );
}

void lcd_display_mode(int1 char_display_on, cursor_display_on, char_blink_on) // Wu
{
int8 display_mode = 0x08;
if (char_display_on) bit_set(display_mode, 2);
if (cursor_display_on) bit_set(display_mode, 1);
if (char_blink_on) bit_set(display_mode, 0);
lcd_send_byte(0, display_mode );
}


先用 CCS 原版的啦

HD44780

http://home.iae.nl/users/pouweha/lcd/lcd.shtml

發表於: 2005/1/19 1:00
頂部


Re: 使用ccs,用adc問題無法解決,請教有經驗者
管理員
管理員


Dear Customer,

依照您的描述看來 , 應該是對應的腳位看錯了. 在 PIC18F452 裡面 , RA4 的腳色是 RA4 或 T0CKI . ADC 的 AN4 應該在 RA5 才是喔 :)

希望您的問題可因此解決 !

謝謝啦 ....

發表於: 2005/1/18 23:12
頂部


Re: LCD顯示
資深會員
資深會員


...文中提到
<只要那四條 data 線在同一個 PORT 就好,其他三條可以隨意變更,把 LCD.C 改幾行就好。>
請教一下,要如何修改LCD.C,使得其他三條可以隨意變更?


發表於: 2005/1/18 22:55
頂部


使用ccs,用adc問題無法解決,請教有經驗者
資深會員
資深會員


程式如下
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud = 115200, xmit= PIN_C6, rcv= PIN_C7)
void main()
{
char i;
int16 advalue16[8];

setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
while(1){
for(i=0; i<8; i++){
set_adc_channel(i);
delay_us(20);
advalue16[i]=read_adc();
}
for(i=0; i<5; i++)
printf("%ld ", advalue16[i]);
printf("\n\r");
delay_ms(500);
}
}

問題為
RA0~RA3接訊號,正確顯示數值
RA4接任何準位(0~5v內),顯示值為1023
我已快抓狂了,有人可為我解決嗎?


發表於: 2005/1/18 20:03
頂部


Re: 18F452 BOOTLOAD Firmware 的問題
版主
版主


另外,有兩個注意事項:

1、為簡化起見,該程式假設hex檔中,程式長度是16byte的整數倍。所以,也許利用mplab中export的功能,將欲下載的程式段依16byte的整數倍下載出來會比較簡單。

2、不曉得為什麼,實驗時發現,超級終端機的ASCII設定中,行列延遲及字元延遲各加1毫秒比較不會有傳輸錯誤發生。有興趣的人研究一下吧。

發表於: 2005/1/18 16:21
頂部



« 1 ... 7268 7269 7270 (7271) 7272 7273 7274 ... 7522 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------