单片机复习重点1.单片机的堆栈指针SP始终是指示堆栈顶。
2.当程序状态字寄存器PSW状态字中RS1和RS0分别为0和1 时,系统先用的工作寄存器组为组1。
3.定时器T1的中断入口地址是 001BH 。
4.8051定时/计数器共有四种操作模式,由TMOD寄存器中M1 M0的状态决定,当M1 M0的状态为01 时,定时/计数器被设定为 16位定时/计数器。
5.串行口的工作方式由SCON寄存器决定。
6. 定时器T0的溢出标志TF0,在CPU响应中断后由硬件自动清零。
7.扩展程序存储器2764时,需要 5 条P2口线。
8.若单片机的振荡频率为6MHz,设定时器工作在方式1需要定时1ms,则定时器初值应为216-500。
9.扩展存储器时要加锁存器373,其作用是锁存寻址单元的低八位地址。
11.8051单片机中,唯一一个用户可使用的16位寄存器是DPTR 。
12.8051的程序计数器PC为16位计数器,其寻址范围是0000H-FFFFH ,64KB 。
13.单片机应用程序一般存放在 ROM 中。
14.MCS-51单片机在同一优先级的中断源同时申请中断时,CPU首先响应外部中断0 。
15.定时器若工作在循环定时或循环计数场合,应选用工作方式216.MCS-51单片机的外部中断1的中断请求标志是 IT1 。
17.中断入口地址一般可存放转移指令。
18.串行口每一次传送 1帧字符。
19.定时器1工作在计数方式时,其外加的计数脉冲信号应连接到 P3.5/ T1引脚。
20某应用系统需要通过P1.0输出脉宽为500us的方波,系统选用定时器/计数器0(T0),定时方式3,主频为12MHz。
试写出相应的程序。
(参考课件例题)C语言程序(中断方式):# include <reg52.h> //包含特殊功能寄存器库sbit P1_0=P1^0;void main( ){ TMOD=0x03; //设置工作模式TL0=0x06;TH0=0x06; //为定时器赋初值ET0=1; //允许定时0中断EA=1;TR0=1; //启动定时器0while(1); //等待中断}void time0_int(void) interrupt 1{P1_0=~P1_0;}中断方式汇编语言程序:ORG 0000HLJMP MAINORG 000BH ;中断处理程序CPL P1.0RETIORG 0030H ;主程序MAIN:MOV SP, #0DFHMOV TMOD,#02HMOV TL0, #06HMOV TH0, #06HSETB ET0 ;允许定时器0中断SETB EA ;允许CPU中断SETB TR0 ;启动定时器0SJMP $ ;等待中断END采用查询方式C语言程序:# include <reg52.h>sbit P1_0=P1^0;void main(){ TMOD=0x02;TL0=0x06;TH0=0x06;TR0=1;while (1){ while(!TF0) ; //查询计数溢出TF0=0;P1_0=~P1_0;} }查询方式汇编语言程序:MAIN:MOV TMOD,#02H ;主程序MOV TL0,#06HMOV TH0,#06HSETB TR0LOOP:JNB TF0,$ ;查询计数溢出CLR TF0CPL P1.0SJMP LOOPEND21.将片内RAM 50H~5FH中的数据串行发送,用第9个数据位作奇偶校验位,设晶振为11.0592 MHz,波特率为2400 b/s,编制串行口方式3的发送程序。
(参考课件例题)解:用TB8作奇偶校验位,在数据写入发送缓冲器之前.先将数据的奇偶位P写入TB8,这时,第9位数据作奇偶校验用,发送采用中断方式。
C语言程序清单:#include<reg52.h>unsigned char i=0;unsigned char array[16] _at_ 0x50; //发送缓冲区void main(){ SCON=0xc0; //串行口初始化TMOD=0x20; //定时器初始化TH1=0xf4; TL1=0xf4;TR1=1;ES=1; EA=1; //中断初始化ACC=array[i]; //发送第一个数据送TB8=P; //累加器,目的取P位SBUF=ACC; //发送一个数据while(1); //等待中断}void server() interrupt 4 //串行口中断服务程序{TI=0; //清发送中断标志ACC=array[++i]; //取下一个数据TB8=P;SBUF=ACC;if(i==16) //发送完毕,ES=0; //禁止串口中断}汇编语言程序清单:ORG 0000HSJMP MAIN ;上电,转主程序ORG 23HSJMP SERVER ;转中断服务程序MAIN:MOV SCON,#0C0H ;串行口方式3初始化MOV TMOD,#20H ;定时器1工作在方式2MOV TH1,#0F4HMOV TL1,#0F4HSETB TR1SETB ES ;允许串行口中断SETB EA ;CPU开中断MOV R0,#50HMOV R7,#0FHMOV A,@R0MOV C,PMOV TB8,C ;送奇偶标志位到TB8MOV SBUF,A ;发送第一个数据SJMP $SERVER:CLR TI ;清除发送中断标志INC R0 ;修改数据地址MOV A,@R0MOV C,PMOV TB8,CMOV SBUF,A ;发送下一个数据DJNZ R7,ENDT ;判断数据块是否发送完CLR ES ;否则,禁止串行口中断ENDT:RETI ;中断返回22.编写一个接收程序,将接收的16字节数据送入片内RAM 50H~5FH单元中。
设第9个数据位作奇偶校验位,晶振为11.059 2 MHz,波特率为2 400b/s。
(参考课件例题)解:RB8作奇偶校验位,接收时,取出该位进行核对,接收采用查询方式。
C语言程序清单:#include<reg52.h>unsigned char i;unsigned char array[16] _at_ 0x50; //接收缓冲区void main(){SCON=0xd0; //串行口初始化,允许接收TMOD=0x20;TH1=0xf4;TL1=0xf4;TR1=1;for(i=0;i<16;i++) //循环接收16个数据{ while(!RI); //等待一次接收完成RI=0;ACC=SBUF;if(RB8==P) //校验正确array[i]=ACC;else //校验不正确{ F0=1;break;}}while(1);}汇编语言程序清单:MAIN:MOV TMOD,#20H ;定时器初始化MOV TH1,#0F4HMOV TL1,#0F4HSETB TR1MOV SCON,#0D0H ;串口初始化,允许接收MOV R0,#50H ;首地址送R0MOV R7,#10H ;数据长度送R7WAIT: JNB RI,$ ;等待接收完成CLR RI ;清中断标志MOV A,SBUF ;读数到累加器JNB P,PNP ;P=0,转PNPJNB RB8,ERROR ;P=1,RB8=0,转出错SJMP RIGHTPNP: JB RB8,ERROR ;P=0,RB8=1,转出错RIGHT: MOV @R0,A ;存数INC R0 ;修改地址指针DJNZ R7,WAIT ;未接收完,继续CLR F0 ;置正确接收标志F0=0RETERROR: SETB F0 ;置错误接收标志F0=1 RET23.设计一个独立式按键的键盘接口,并编写键扫描程序,电路原理图如图所示,键号从上到下分别为0~7。
(10分)(参考课件例题)C语言程序清单:#include<reg52.h>void key(){ unsigned char k;P1=0xff; //输入时P1口置全1k=P1; //读取按键状态if(k==0xff) //无键按下,返回return;delay20ms(); //有键按下,延时去抖k=P1;if(k==0xff) //确认键按下return; //抖动引起,返回while(P1!=0xff); //等待键释放switch(k){case:0xfe… //0号键按下时执行程序段break;case:0xfd… //1号键按下时执行程序段break;… //2~6号键程序省略case:0x7f… //7号键按下时执行程序段break;}}汇编语言程序清单:KEY: MOV P1,#0FFH ;P1口为输入口MOV A, P1 ;读取按键状态CPL A ;取正逻辑JZ EKEY ;无键按下,返回LCALL DELAY20MS ;有键按下,去抖MOV A, P1CPL AJZ EKEY ;抖动引起,返回MOV B, A ;存键值KEY1: MOV A, P1 ;以下等待键释放CPL AJNZ KEY1 ;未释放,等待MOV A,B ;取键值送AJB ACC.0,PKEY0 ;K0按下转PKEY0JB ACC.1,PKEY1 ;K1按下转PKEY1…JB ACC.7,PKEY7 ;K7按下转PKEY7 EKEY: RETPKEY1: LCALL K0 ;K0命令处理程序RETPKEY2: LCALL K1 ;K1命令处理程序RET…PKEY4: LCALL K7 ;K7命令处理程序 RET。