51单片机学习笔记(一)_总记
在Proteus中设计好电路图、在Keil中编写程序编译生成十六进制文件。
在电路图中载入该十六进制文件通过相应的程序控制电路。
51hei单片机+Proteus视频+实例+开发工具包 http://download.csdn.net/detail/leytton/7658297
http://www.51hei.com/
文章阅读
http://www.51hei.com/mcuteach/252.html
http://www.51hei.com/mcuteach/150.html
视频教程
http://www.51hei.com/sp/
JBJB P1.3,L1 意思就是判断P1.3的值是不是“1” 如果是就跳转到L1程序执行
eg1
MOV R7,#250 ;赋值R7=250 注意没有"H"
LOOP:
DJNZ R7,LOOP ;R7=R7-1;if(R7!=0) goto LOOP;循环250次
eg2 http://www.51hei.com/mcuteach/244.html
MOV R7,#20
MOV R0,#30H
LOOP:MOV A,@R0
INC R0
DJNZ R7,LOOP
这个例程中大部份指令我们是能看懂的,第一句,是将立即数20送到R7中,执行完后R7中的值应当是20。第二句是将立即数30H送入R0工作寄存器中,所以执行完后,R0单元中的值是30H,第三句,这是看一下R0单元中是什么值,把这个值作为地址,取这个地址单元的内容送入A中,此时,执行这条指令的结果就相当于MOV A,30H。第四句,没学过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们的要求:从30H单元开始将20个数据送入A中。
AJMP无条件跳转指令
以直接地址为目的操作数的指令
MOV direct,A例:MOV 20H,A
MOV direct,Rn MOV 20H,R1
MOV direct1,direct2 MOV 20H,30H
MOV direct,@Ri MOV 20H,@R1
MOV direct,#data MOV 20H,#34H
以间接地址为目的操作数的指令
MOV @Ri,A例:MOV @R0,A
MOV @Ri,direct MOV @R1,20H
MOV @Ri,#data MOV @R0,#34H
十六位数的传递指令
MOV DPTR,#data16
51单片机汇编指令周期表:
http://blog.sina.com.cn/s/blog_4419d72d0100mt7r.html
http://www.51hei.com/mcuteach/242.html
单片机的累加器A与片外RAM之间的数据传递类指令
MOVX A,@Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
在51系列单片机中,与外部存储器RAM打交道的只能是A累加器。所有需要传送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们能看出内外部RAM的区别了,内部RAM间能直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再传送到0200H单元中去。
MOVC就是读代码存储器,MOVX就是读写外部存储器,即外部RAM
51C语言
表 3-1 KEIL uVision2 单片机c语言编译器所支持的数据类型
摘自http://www.51hei.com/mcuteach/146.html
数据类型 | 长 度 | 值 域 |
unsigned char | 单字节 | 0~255 |
signed char | 单字节 | -128~+127 |
unsigned int | 双字节 | 0~65535 |
signed int | 双字节 | -32768~+32767 |
unsigned long | 四字节 | 0~4294967295 |
signed long | 四字节 | -2147483648~+2147483647 |
float | 四字节 | ±1.175494E-38~±3.402823E+38 |
* | 1~3 字节 | 对象的地址 |
bit | 位 | 0 或 1 |
sfr | 单字节 | 0~255 |
sfr16 | 双字节 | 0~65535 |
sbit | 位 | 0 或 1 |
位运算:[摘自百度百科]
P1=(4>0)&&(9<0xab);//将逻辑运算结果送P1口
P0=0xa2^0x3c;//将条件运算结果送P0口,P0=8=0000 1000B
一个简单的C51程序[参考http://www.51hei.com/mcuteach/248.html]
#includevoid DELAY() //延时函数{ unsigned char i,j;for(i=0;i<250;i++){for(j=0;j<200;j++);} }void main() //程序从这里开始执行{while(1) //这句的作用就是反复的执行下面这个{}中包含的4句{P1_0=1; //(1)熄灭灯DELAY(); //(2)延时一段时间P1_0=0; //(3)点亮灯DELAY(); //(4)延时一段时间}}
51单片机学习笔记中断系 相关文章:
- 51单片机学习笔记(四)_中断系统(11-20)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)