如果要支持中文注釋, 必須做如下處理:
啟功HEW, 並關閉workspace
點擊系統菜單[Tools], 選擇Administration
在Toolchains中選擇當前的NC30WA版本」Renesas M16C Stardard Toolchain 5.40.00」
選擇Properties
選擇Environments選項卡下的「NCKIN」和「NCKOUT」,然後點擊「Modify」按鈕, 將SJIS改成EUC
工程路徑問題
可以設定預設的工程路徑[Setup]=>[Options];
不要使用中文路徑, 在路徑中不要有兩個連續的下劃線, 不要有空格, 路徑不要太深;
HEW and S/W
建立新的工程
Application:使用匯編配置文件的工程向導。如果選擇生成主函數(main 函數),則主函數所在文件為C 語言文件。其特點是,在配置文件中,直接使用匯編語言對單片機進行初始化配置,效率高,過程可控。適合有一定基礎的用戶使用。
C source startup Application:全部使用C 語言的工程向導。其特點是,簡單。由於整個工程使用C 語言,所有的地址自動分配。用戶在使用過程中無需關心地址沖突的問題。但是由於部分代碼由向導生成,在工程中不可見。因此,相對於Application,其可更改的部分相對較少。適合初學者使用。
Empty Application:向導不生成任何文件。所有文件需要自己添加。適用於高級用戶使用。
Import Marfile:導入其他瑞薩編譯器生成的中間文件。
Library:製作程序庫。
HEW的一些功能
在Toolchains中選擇當前的NC30WA版本」Renesas M16C Stardard Toolchain 5.40.00」
添加新的模擬工具
選擇[Debug]=>[Debug Sessions]
點擊[Add], 增加一個新的工具名, 然後[OK]
選擇[Debug]=>[Debug Settings] 選擇新增加的工具名,
選擇[Add], 選擇相應的文件格式和路徑. 點擊[OK]退出.
Debug參數設定;選擇[Options]選擇卡,做合適的設置.
② 單片機程序注釋
ORG 0000H //定義程序開始地址
AJMP MAIN //跳轉到MAIN標志處執行
ORG 30H // 定義MAIN起始地址為0030H
MAIN: MOV SP, #60H //把立即數0x60植入SP
MOV DPTR, #4100H //送立即數4100H到DPTR
MOV A, #0fH //送立即數0fH到A寄存器
MOVX @DPTR, A //將A中的值送到以DPTR中的內容表示的外部地址中,即外部地址4100H中
MOV 70H,#01H
MOV 71H,#02H
MOV 72H,#03H
MOV 73H,#04H
MOV 74H,#05H
MOV 75H,#06H
MOV 76H,#07H
MOV 77H,#08H //以上均是把後面的立即數送到相對應的地址中
LOOP:ACALL DISPLAY //調用子函數,即DISPLAY標志處的程序段
AJMP LOOP //跳轉到LOOP處執行,與上面那條構成循環調用DISPLAY
DISPLAY:
MOV R0,#70H //送立即數到R0寄存器
MOV R3,#0feH //送立即數到R3寄存器
LD0: MOV DPTR, #H //送立即數到DPTR寄存器
MOV A, #0FFH //送立即數0FFH到A寄存器
MOVX @DPTR, A //將A中的數0FFH送到以DPTR中的內容所表示的外部地址,即外部H地址處。
MOV A,@R0 // 將以R0中的內容所表示的地址中的內容送到A中,即地址(70H)中的數01H送到A中
MOV DPTR,#DISTAB //把DISTAB標志所處的地址送到DPTR中
MOVC A,@A+DPTR //查表。@A+DPTR即是取得(A+DPTR)地址中的內容。然後通過MOV指令送到A中。這條指令結合上面兩條,及後面的那個INC R0 指令共同構成遍歷DISTAB所表示的表。達到查表。
MOV DPTR,#4101H
MOVX @DPTR,A //與上面一句結合,達到把A中的內容送到外部地址4101H中。
MOV DPTR,#H //送立即數H到DPTR
MOV A,R3 // 把R3中的內容送到A中
MOVX @DPTR,A //把A中內容送到外部地址H中
ACALL DELAY //調用延時子函數DELAY,即跳到DELAY處執行
INC R0 //R0中的內容自增1
JNB ACC.7,LD1 //如果ACC.7這一位不為1,則跳到LD1標志處執行。
RL A //A中內容左移一位
MOV R3,A //送A中的內容到R3中
AJMP LD0 //跳到LD0標志處
LD1: RET //子函數返回指令
DISTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //定義一個表,相當於C語言中的數組。DB的意思是規定表中每個數佔一個位元組。
DELAY: //延時子函數
MOV R7,#02h //送立即數02H到R7中
DELAY1: MOV R6,#0FFH//送立即數0FFH到R6中
DELAY2: DJNZ R6,DELAY2 //R6中的數減1後如不為跳轉到DELAY2處,本例中即繼續執行這句,直到R6中內容為0.
DJNZ R7,DELAY1 //R7中的內容減一,不為零則跳轉到DELAY1處
RET//延時子函數返回
END //程序結束
語言表達不好,解釋的難免有點不周到,希望能夠幫助LZ。
LZ加油!
③ 單片機程序做批註,謝謝
看你代碼片段
write_com();應該是寫入命令
0x80 0x90 0x88 0x98 對應的是命令值 這個晶元文檔里找
write_dat();應該是寫數據 寫入的數據是tab1[16] tab2[16] tab3[16] tab4[16] 這四個數組里的數據,每個數組里有16個位元組的數據,write_dat每次寫入1個位元組,循環16次寫入完1個數組
delay(1);延遲函數
EnDisplay就是個標識用的變數
所以上面代碼大概意思應該就是
當f不等於7和8時 按照指定命令格式寫入tab1 tab2 tab3 tab4里的數據,並將標識變數EnDisplay置0
當f等於7或8 並且 EnDisplay等於0時 寫入命令0x01 EnDisplay置1; 寫入命令0x80 並寫入數據 2個位元組 分別a_shi/10+0x30、a_shi%10+0x30
當f等於7或8 並且 EnDisplay不等於0時 寫入命令0x80 並寫入數據 2個位元組 分別a_shi/10+0x30、a_shi%10+0x30
這里0x30應該是 『0』這個字元的Ascii碼 一般 數字+0x30 用於把0~9整型數字轉換成對應的字元
所以a_shi應該是一個2位數字
a_shi/10:取a_shi的十位
a_shi%10:取a_shi的個位
所以
a_shi/10+0x30:取a_shi的十位 並轉換成對應的數字字元
a_shi%10+0x30:取a_shi的個位 並轉換成對應的數字字元
④ 51單片機C語言程序注釋標注(寫全)
#include<reg51.h>//調用頭文件reg51.h
voidmain()//主函數
{
unsignedchar//無符號字元型
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//定義一個數組LED數碼管解碼用的碼表
while(1)//主循環
{
P2=P2|0x07;//P2口與0x07按位進行或運算
while(P2&0x07==0x07);//如果P2扣低三位為111則原地等待
switch(P2&0x07)//獲取P2低三位值並且據此執行響應的操作
{
0x06:P0=tab[0x0D];break;//P2低三位為06H,數碼管顯示「d」
0x05:P0=tab[0x0E];break;//P2低三位為05H,數碼管顯示「E」
0x03:P0=tab[0x0F];break;//P2低三位為03H,數碼管顯示「F」
}
}
}