如果要支持中文注释, 必须做如下处理:
启功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”
}
}
}