◆波特率公式:TH1=256-f/(波特率*12*32/2^SMOD)◆MCS-51系列单片机内部有哪些主要的逻辑部件?答案:一个8位的CPU、一个布尔处理机、一个片内振荡器、128B的片内RAM、21个特殊功能寄存器、4个8位并行I/O接口、一个全双工的串行口、2个16位的定时器/计数器、5个中断源、2个中断优先级。
◆机器周期是指:完成MCS-51一个典型的指令花费的振荡周期称为一个机器周期;一个机器周期由六个状态组成,包含有12个振荡周期;◆当外部中断采用低电平触发方式时,为了避免在中断返回后再次响应该中断,要求外部中断源在执行的中断程序返回前撤销中断请求信号(使引脚电平变高);◆程序计数器PC是用来存放下一条将要执行的指令地址,共16 位。
单片机上电复位后,PC =0000H ;◆当单片机的P1口做为一般的I/O口使用时,为8位准双向口的意思是指:当输入信号时,需先向P1口锁存器写1,以保证读引脚的正确性;◆何谓堆栈?它设置在哪个存储区?在实际编程中,它有何应用价值?答:堆栈是一个后进先出的特殊的数据缓冲区,并由栈指针SP指示堆栈中的数据深度。
在MCS-51系列单片机中,堆栈设置在内部RAM数据存储区内。
在实际编程中,可用于数据的传递,数据的交换、保存CPU现场等作用◆简述MCS-51单片机程序存储器的几个特殊入口地址的含义。
0000H:复位入口地址0003H:外部中断0中断服务程序入口地址000BH:定时器/计数器0溢出中断服务程序入口地址0013H:外部中断1中断服务程序入口地址001BH:定时器/计数器1溢出中断服务程序入口地址0023H:串行口中断服务程序入口地址◆何谓静态显示?何谓动态显示?两种显示方式有何优缺点?所谓静态显示,是指当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止,公共端接固定的电平。
LED动态显示是将所有位的段选线并接在一个I/O接口上,称为段口,共阴极端或共阳极端分别由相应的I/O接口线控制,称为位口。
静态显示显示稳定,但软件简单;动态显示硬件简单,但软件需要不断地刷新。
◆编程将片内RAM 30H~39H单元中的内容送到以3000H为首的存储区中。
MOV R0,#30HMOV DPTR,#3000HMOV R7,#10L1:MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R7,L1RET◆片内RAM 60H开始存放20个数据,试统计正数、负数及为零的数据个数,并将结果分别存在50H、51H、52H单元中。
MOV 50H,#0MOV 51H,#0MOV 52H,#0MOV R7,#20MOV R0,#60HL3: MOV A,@R0JZ L1JB ACC.7,L2INC 50HSJMP LENDL2:INC 51HSJMP LENDL1:INC 52HLEND: INC R0DJNZ R7,L3RET◆从片外RAM 2000H单元开始存有20个有符号数,要求把它们传送到片外RAM 3000H 开始的单元,但负数不传送,试编写程序。
MOV DPTR,#2000HMOV R0,#20HMOV R7,#20L1: MOVX A,@DPTRMOV @R0,AINC DPTRINC R0DJNZ R7,L1MOV DPTR,#3000HMOV R0,#20HMOV R7,#20L2: MOV A,@R0JB ACC.7,L3MOVX @DPTR,AL3: INC DPTRINC R0DJNZ R7,L2RET◆在片外RAM 2000H、2001H和3000H、3001H中分别存放两个字数据(高8位在偶地址),试比较两个数的大小,把大数存放在4000H、4001H单元中。
MOV DPTR,#2000HMOVX A,@DPTRMOV 20H,AINC DPTRMOVX A,@DPTRMOV 21H,AMOV DPTR,#3000HMOVX A,@DPTRMOV 30H,AINC DPTRMOVX A,@DPTRMOV 31H,ACLR CMOV A,21HSUBB A,31HMOV A,20HSUBB A,30HJNC L1MOV A,20HMOV B,21HSJMP L2L1:MOV A,30HMOV B,31HL2:MOV DPTR,#4000HMOVX @DPTR,AINC DPTRMOV A,BMOVX @DPTR,ARET◆试编写一段对中断系统初始化的程序,允许外部中断0、外部中断1、定时器/计数器T0溢出中断、串行口中断,且使定时器/计数器T0溢出中断为高优先级中断。
SETB EASETB EX0SETB EX1SETB ET0SETB ESSETB PT0D7D6D5D4D3D2D1D0IE (A8H)EA _—ET0_—ES ET1 EX1 EX0IE名称:EA:中断允许总控制位;ES:串行口中断;ET1:定时器/计数器1中断;EX1:外部中断1中断;IP名称:PS:串行口中断;PT1:定时器/计数器1中断; PX1:外部中断1中断。
◆设MCS 51单片机时钟为12MHz,利用定时器T0编程令P1.0引脚输出2ms的矩形波程序,要求占空系数为1:2(高电平时间短)。
ORG 0000HLJMP MAINORG 000BHLJMP T0INTORG 0030HMAIN:MOV SP,#60HMOV R7,#0MOV TMOD,#01H ;初始化MOV TH0,#0FDH ;定时666微妙MOV TL0,#66HSETB EASETB ET0SETB TR0L1:SJMP L1;中断服务程序T0INT:MOV TH0,#0FDH ;重载初始值MOV TL0,#66HINC R7CJNE R7,#1,LL1CLR P1.0SJMP LLENDLL1: CJNE R7,#3,LLENDSETB P1.0MOV R7,#00HLLEND:RETI◆如果MCS-51单片机系统的晶振频率为12MHz,分别指出定时器/计数器方式1和方式2的最长定时时间。
方式1:65536us;方式2:256us◆设MCS-51单片机的晶振频率为12MHz,要求在P1.0输出周期是200ms的方波,试编写程序。
ORG 0000HLJMP MAINORG 001BHLJMP T1INTORG 0030HMAIN: MOV SP,#70HMOV TMOD,#10H ;T1方式1MOV TH1,#3CH ;定时50msMOV TL1,#0B0HMOV R7,#2 ;50ms*2=100msSETB EASETB ET1SETB TR1SJMP $T1INT: MOV TH1,#3CHMOV TL1,#0B0HDJNZ R7,L1MOV R7,#2CPL P1.0L1:RETI◆设串行异步通信的传送速率为2400波特,传送的是带奇偶校验的ASCII码字符,每个字符包含10位(1个起始位,7个数据位,1个奇偶校验位,1个停止位),试编程初始化程序。
设定串行口位方式1.MOV SCON,#40HMOV PCON,#80HMOV TMOD,#20HMOV TH1,#0F4HMOV TL1,#0F4HSETB TR1◆设外部晶频率振为11.0592MHz,串行口工作在方式1,波特率为4800b/s。
编写用T1作为波特率发生器的方式字并计算T1的计数初值。
TMOD:20HTH1=TL1=0FAH◆设计一个单片机的双机通信系统,串行口工作在方式1,编写通信程序将甲机内部RAM 30H~3FH存储区的数据块通过串行口传送到乙机内部RAM 40H~4FH存储区中。
甲机发送(采用查询方式):MOV SCON,#80H ;设置工作方式2MOV PCON,#00H ;置SMOD = 0,波特率不加倍MOV R0,#30H ;数据区地址指针MOV R2,#10H ;数据长度LOOP: MOV A,@R0 ;取发送数据MOV C,P ;奇偶位送TB8MOV TB8,CMOV SBUF,A ;送串行口并开始发送数据WAIT: JBC TI,NEXT ;检测是否发送结束并清TISJMP WAITNEXT: INC R0 ;修改发送数据地址指针DJNZ R2,LOOPRET乙机接收(采用查询方式):MOV SCON,#90H ;工作方式2,并允许接收MOV PCON,#00H ;置SMOD = 0MOV R0,#40H ;置数据区地址指针MOV R2,#10H ;等待接收数据长度LOOP: JBC RI,READ ;等待接收数据并清RISJMP LOOPREAD: MOV A,SBUF ;读一帧数据MOV C, PJNC LP0 ;C不为1转LP0JNB RB8,ERR ;RB8 = 0,即RB8不为P转ERRAJMP LP1LP0: JB RB8,ERRLP1: MOV @R0,AINC R0DJNZ R2,LOOPRET◆在一个8031应用系统中扩展一片2764、一片8255A和一片6264。
试画出系统框图,并指出所扩展的各个芯片的地址范围。
将图8-23中的/CE1接74LS138译码器的/Y0端。
2764的地址空间范围:0000H~1FFFH6464的地址空间范围:0000H~1FFFH82552A的口地址:PA口:0FFFCH;PB口:0FFFDH;PC口:0FFFEH;控制口0FFFFH。
◆单片机采用晶振6MHZ,P1口接有8个发光管,围成圆形(跑马灯)。
要求:①发光管每次只亮一个,一次从P1.0~P1.7循环发光,切换时间为1秒(低电平亮);②延时采用T0定时器,工作于自动装入时间常数的定时器工作方式,允许T0中断,试写出完整的可调试程序。
ORG 0000HLJMP startORG 000BHLJMP timer0ORG 30Hstart:MOV TMOD,#02H ;T0工作于方式2—自动重装载MOV TL0,#06 ;定时器自动重装初值MOV TH0,#06MOV R7,#100MOV R6,#20 ;R6、R7中断次数,一次中断500uS,即500*100*20=1sMOV A,#0FEH ;循环送出的控制字节MOV P1,A ;送出控制字节,P1.0灯亮SETB TR0SETB ET0SETB EAwait:SJMP wait ;主程序,无限循环timer0:DJNZ R7,EXITMOV R7,#100DJNZ R6,EXITMOV R6,#20RL A ;左循环一位 MOV P1,A EXIT:RETIEND◆ 一个单片机系统,时钟频率fosc=11.059Mhz ,现要求串行口通信的波特率为9600bps ,采用T1作为波特率发生器,试计算出定时器T1的自动重装载值、实际波特率并验算实际波特率与理论波特率的相对误差?取:SMOD=0;T1 自动重装载值: FDH N ==-=⨯⨯⨯-=25332561232960010059.112566演算: ()bps 波特率8.9599253256123210059.116=-⨯⨯⨯=误差计算:%0018.096008.95999600=-=误差程序段:MOV TMOD ,#20HMOV TH1,#0FDH MOV TL1,#0FDH SETB TR1◆8255初始化:PORTA EQU (A 口地址)PORTB EQU (B 口地址) PORTC EQU (C 口地址) CS8255 EQU (/CS 地址) ORG 0000HMOV DPTR #CS8255 MOV A,#10010000B MOVX @DPTR,A◆编制一个计算符号函数y=SGN(x)的完整的可调试的程序。