20天89C51单片机总结
看了怎么久的单片机做个总结。其实就芯片来说单片机没想象的那么复杂!89C51就40个引脚。其中P0~P3口占了32个。一个接地一个接电源,两个振荡引脚。一个EA引脚ROM的起始地址选择端。一个ALE/Vpp片外地址锁存器充许引脚/线编程电源输入端。PSEN片外ROM充许使能端。当然还有个复位REST引脚。其中P3口全部都有第2功能复用:定时 中断 串行口中断。当P0~P3端口写#FFH时片内锁存器置1这是单口为双向输入 输出口。这是从芯片外围看。
从芯片的内部看的话主要的就两个独立的存储器 ROM,RAM 一个为程序指示,一个为数据处理和存放。编程时通过寻址方式区别ROM,RAM。他们都为64KB的容量。ROM的片内为4KB存储空间。由EA指示是从片外执行程序还是从片内执行。RAM片内为256字节即FFH分4个部分。00H~1FH为工作寄存器组。20H~2FH为为寻址空间。30H~7FH为用户RAM区。80H~FFH为特殊寄存器区。有22个SFR(这里就不在介绍了)。
说说指令系统吧。MOV ,MOVX, MOVC3个传送指令其中片外存储器是不能直接传送的。3个调用指令AJMP,LJMP,SJMP.分别用于不同的调用范围。逻辑算术指令ANL ,ORL ,XRL.还有加 ADD,减SUBB,乘MUL,除div。还有很多的指令如交换,跳转,循环,位寻址,布尔处理指令等。
例如下面的循环-跳转指令
MOV R0,#00H
MOV R1,#AAH
MOV R7#0BH
loop: MOV A ,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,loop
END
这个程序就是执行片内传送功能的。
说说程序的一般流程吧。分为顺序,分支,循环,还有组合嵌套。上面的例题就是循环的一种。
写个分支程序的例题
MOV A,R1
RL A
MOV DPTR,#data
JMP @A +DPTR
data: AJMP KK1
AJMP KK2
.
.
AJMP KKn
这个指令就是以 data为首地址 R1为偏移量的分支转移,因为AJMP为双字节指令所以要执行RL A。
下面在说下中断跟定时吧。
中断涉及的寄存器由 TCON , IE, IP,SCOM.
通过对中断中断标志位的设置区执行中断请求。中断有5个入口地址 03H 0BH 13H 1BH 23H.
例如外部中断一的入口在默认模式下设置为最高优先级
SETB PX1
STEB EX1
STEB EA
非常简单,有点像闯关游戏每个环节都完成才能执行中断。
下面是定时器,定时器在单片机的运用是非常高的。4种工作模式0 , 1 ,2 ,3。
我就用典型的定时器0模式2在12MHZ的程序编写一个正弦波输出XXMS在P1.0。初值就用KKH代替吧。
MOV P1 ,#FFH
MAIN: MOV TMOD , #02H
MOV TH0 ,#KKH
MOV LHO ,#KKH
STEB ET0
STEB TRO
STEB EA
AJMP $
中断程序 TIME0: CLR TF0
CPL P1.0
RETI.
还有串行口传输了。89C51有4种模式的传输,其中波特率的设置尤为重要。
涉及寄存器有 TCOM TDOM SCOM SDOM PCON.
其实89C51还可以用软件模拟总线接口。如SPI I2C等还有按键的程序设置外部的扩展实在太多了。以后有时间在编写发上来。
- 在应用可编程测控网络设计(03-15)
- 基于AT89C51单片机的微型可编程控制器(04-23)
- 基于AT89C51单片机的量程自切换频率计(01-25)
- 基于AT89C51单片机的十进制计算器系统设计(06-29)
- 基于单片机的智能计步器设计(09-20)
- 可编程逻辑器件与单片机在双控制器中的设计(06-04)