单片机考点.docx
《单片机考点.docx》由会员分享,可在线阅读,更多相关《单片机考点.docx(13页珍藏版)》请在冰豆网上搜索。
单片机考点
1、例题
例4-1使用定时器/计数器T0的方式0,设定1ms的定时。
在P1.0引脚上产生周期为2ms的方波输出。
晶体振荡器的频率为fosc=6MHz。
(p100)
解:
①定时常数计算
振荡器的频率fosc=6MHz=6×106Hz
方式0计数器长度L=13,2L=213=8192
定时时间t=1ms=1×10-3s
定时常数TC=2L-fosc×t/12=8192-6×106×10-3/12=8192-500=7692
定时常数TC转换成二进制数TCB=1111000001100B
所以TCH=0F0H,TCL=0CH
②TMOD的设定(即控制字)#00H
③编程
MOVTMOD,#00H;写控制字
MOVTH0,#0F0H;写定时常数
MOVTL0,#0CH
SETBTR0;启动T0
SETBET0;允许T0中断
SETBEA;开放CPU中断
AJMP$
ORG000BH;T0中断矢量地址
AJMPINQP
ORG00××H;中断服务程序
INQP:
MOVTH0,#0F0H;重写定时常数
MOVTL0,#0CH
CPLP1.0;P1.0变反输出
RETI;中断返回
例4-2使用定时器/计数器T1的方式1,设定1ms的定时。
同样,在P1.0引脚上产生周期为2ms的方波输出。
晶体振荡器的频率为fosc=6MHz。
(p101)
解:
①定时常数计算
振荡器的频率fosc=6MHz=6×106Hz,
方式1计数器长度L=16,2L=216=65536
定时时间t=1ms=1×10-3s
定时常数TC=2L-fosc×t/12=65536-6×106×10-312=65536-500=65036
定时常数TC转换成二进制TCB=1111111000001100B=0FE0CH
所以TCH=0FEH(高8位),TCL=0CH(低8位)
②TMOD的设定(即控制字)#10H
③编程
ORG001BH;T1中断矢量地址
AJMPINQP
ORG100H;主程序入口
MOVTMOD,#10H;写控制字
MOVTH1,#0FEH;写定时常数
MOVTL1,#0CH
SETBTR1;启动T1
SETBET1;允许T1中断
SETBEA;开放CPU中断
AJMP$
ORG00××H;中断服务程序
INQP:
MOVTH1,#0FEH;重写定时常数
MOVTL1,#0CH
CPLP1.0;P1.0变反输出
RETI;中断返回
例5.1.双字节加法程序段。
设被加数存放于片内RAM的addr1(低位字节)、addr2(高位字节),加数存放于adddr3(低位字节)和addr4(高位字节),运算结果和数存于addr1和addr2中。
其程序段如下:
START:
PUSHACC;将A中内容进栈保护
MOVR0,#addr1;将addr1地址值送R0
MOVR1,#addr3;将addr3地址值送R1
MOVA,@R0;被加数低字节内容送A
ADDA,@R1;低字节数相加
MOV@R0,A;低字节数和存addr1中
INCR0;指向被加数高位字节
INCR1;指向加数高位字节
MOVA,@R0;被加数高位字节送A
ADDCA,@R1;高字节数相加
MOV@R0,A;高字节数和存addr2中
POPACC;恢复A原内容
这里将A原内容进栈保护,如果原R0、R1内容有用,亦需进栈保护。
如果相加结果高字节的最高位产生进位且有意义时,应对标志CY位检测并处理之。
例5.3求双字节补码程序。
设对addr1,addr1+1的双字节读数取补后存入如addr2和addr2+1单元中,其中高位字节在高地址单元中。
8位微机对双字节数取补需分二次进行。
首先对低字节数取补,然后判其结果是否为全“0”。
若为“0”,则高字节数取补;否则,高字节数取反。
双字节数取补程序段如下:
START:
MOVR0,#addr1;原码低字节地址码送R0
MOVR1,#addr2;补码低字节地址码送R1
MOVA,@R0;原码低字节内容送A
CPLA;A内容取反+1,即取补
INCA
MOV@R1,A;低字节补码存addr2单元
INCR0;指向原码高字节
INCR1;指向补码高字节
JZLOOP1;判(A)=0?
当(A)=0转LOOP1
MOVA,@R0;原码高字节送A
CPLA;高字节内容取反
MOV@R1,A;高字节反码存addr2+1单元
SJMPLOOP2;转LOOP2,结束
LOOP1:
MOVA,@R0;低字节补码为0
CPLA;对高字节数取补
INCA
MOV@R1,A;高字节补码存addr2+1单元
LOOP2:
END;结束
例5.4存放于addr1和addr2中的两个无符号二进制数,求其中的大数并存于addr3中,其程序流程如图5--7所示,程序段如下:
TART:
MOVA,addr1;将addr1中内容送A
CJNEA,addr2,LOOP1;两数比较,不相等则转LOOP1
LOOP3:
RET;结束
LOOP1:
JCLOOP2;当CY=1,转LOOP2
MOVaddr3,A;CY=0,(A)>(addr2)
SJMPLOOP3;转结束
LOOP2:
MOVaddr3,addr2;CY=1,(addr2)>(A)
SJMPLOOP3
从上可见,CJNE是一组功能极强的比较指令,它可指出两数的大、小和相等。
通过寄存器和直接寻址方式,可派生出很多条比较指令。
同样,它亦属于相对转移。
图6-11扩张4KX8位片程序存储器的电路(P189)
在电路中,EA是上拉到+5V的,这是一种既用80C51/87C51/89C51片内4KB程序存储器,又用片外扩展的4KB程序存储器的电路。
当运行中PC小于0FFFH时,访问片内程序存储器;PC大于0FFFH时,访问片外程序存储器2732。
本片2732的地址范围为1000H~1FFFH。
电路中只扩展一片2732,它的片选接CE地,PSEN作为其输出允许信号,ALE作为锁存器74HC373的锁存允许信号。
在这里,P2口的其它线虽然未作高位地址线用,但是它们再也不能简单地作I/O线用了。
图6--18扩展片外程序存储器和片外数据存储器的电路(p95)
在电路中,程序存储器和数据存储器都由P2口提供高8位地址,P0口提供低8位地址和8位数据“或”指令,且公用一个地址锁存器。
因而两者共处同一地址空间,即程序存储地址范围为0000H~1FFFH,数据存储器的地址错范围也为0000H~1FFFH。
但程序存储器由读选通信号PSEN控制,数据存储器的读/写由RD和WR信号控制。
由于控制信号的不同,程序存储器和数据存储器的空间在逻辑上是严格分开的,所以在访问时不会发生总线冲突。
图4--7方式1时,定时器/计数器T0、T1的结构简图
图2--12为片内数据存储器各部分地址空间分布图。
寄存器
复位时内容
寄存器
复位时内容
PC
0000H
IE
0**0000B
ACC
00H
TL0
00H
B
00H
TH0
00H
PSW
00H
TL1
00H
SP
07H
TH1
00H
DPTR
0000H
SCON
00H
P0—P3
FFH
SBUF
不定
TMOD
00H
PCON
0xxx0000B
TCON
00H
IP
(xxx00000B)
表2-6特殊功能寄存器的复位状态
串行口控制寄存器SCON
串行口控制寄存器SCON是一个逐位定义的8位寄存器,由它控制串行通信的方式选择、接收和发送,指示串行口的状态。
寄存器SCON既可字节寻址也可位寻址。
表4-7串行口工作方式选择位SM0、SM1
SM0
(SCON.7)
SM1
(SCON.6)
工作
方式
特点
波特率
0
0
方式0
8位移位寄存器
fosc/12
0
1
方式1
10位UART
可变
1
0
方式2
11位UART
fosc/64或fosc/32
1
1
方式3
12位UART
可变
一、P3口的第二功能(P17)
P3——8位,准双向I/O口,具有内部上拉电阻。
P3还提供各种替代功能。
在提供这些功能时,其输出锁存器应由程序置1。
P3口可以驱动4个LSTTL负载。
串行口:
P3.0——RXD(串行输入口),输入。
P3.1——TXD(串行输出口),输出。
中断:
P3.2——INT0,外部中断0,输入。
P3.3——INT1,外部中断1,输入。
定时器/计数器:
P3.4——T0,定时器/计数器0的外部输入,输入。
P3.5——T1,定时器/计数器1的外部输入,输入。
数据存储器选通:
P3.6——WR,低电平有效,输出,片外数据存储器写选通。
P3.7——RD,低电平有效,输出,片外数据存储器读选通。
二、控制线:
共4根。
(P17)
①输入:
RST——复位输入信号,高电平有效。
EA/VPP——片外程序存储器访问允许信号,低电平有效。
②输入、输出:
ALE/PROG——地址锁存允许信号,输出。
③输出控制线:
PSEN——片外程序存储器选通信号,低电平有效。
三、数据指针DPTR(P20)
DPTR是一个16位的特殊功能寄存器,主要功能是作为片外数据存储器寻址用的地址寄存器(间接寻址),故称为数据指针。
访问片外数据存储器的指令为:
MOVXA,@DPTR读
MOVX@DPTR,A写
此时,DPTR的输出,即片外数据存储器的地址。
DPTR寄存器也可以作为访问程序存储器时的基址寄存器。
MOVCA,@A+DPTR
JMP@A+DPTR
DPTR寄存器既可以作为一个16位寄存器处理如,
MOVDPTR,#16位地址
INCDPTR
也可以作为两个8位寄存器处理,其高8位用DPH表示,低8位用DPL表示。
如:
CJNEA,DPL,$
CJNEA,DPH,$
在80C51中,两个地址寄存器,即程序计数器PC与数据指针DPTR,有相同之处,也有差别:
①两者都是与地址有关的16位的寄存器。
其中,PC与程序存储器的地址有关,而DPTR与数据存储器的地址有关。
作为地址寄存器使用时,PC与DPTR都是通过P0和P2口输出的。
但是,PC的输出与ALE及PSEN有关;DPTR的输出,则与ALE、WR、RD相联系。
②PC只能作为16位寄存器对待;由于有自动加1的功能,故又称为计数器;PC是不可以访问的;有自己独特的变化方式;它的变化轨迹决定了程序执行的流程。
DPTR可以作为16位寄存器对待,也可以作为两个8位寄存器对待;DPTR是可以访问的。
四、程序状态字PSW