北工大单片机期末复习题A4一纸开 - 图文 下载本文

键盘扫描程序: R4 列号 R2 扫描码 MAIN:ACALL KEY SUBB A,06H JZ PRINT SJMP MAIN ORG 0100H KEY: ACALL KS JNZ KEY_1 ACALL DELAY AJMP KEY KEY_1: ACALL DELAY

ACALL DELAY ACALL KS JNZ KEY_2 AJMP KEY

KEY_2: MOV R2, #11111110B MOV R4, #00H

KEY_3: MOV DPTR, #0FF21H MOV A, R2

MOVX @DPTR, A INC DPTR

MOVX A,@DPTR CPL A JZ NEXT

JNB ACC.0 KEY_4 MOV A, #00H AJMP KEY_7

KEY_4: JNB ACC.1, KEY_5 MOV A, #4 AJMP KEY_7

KEY_5: JNB ACC.2, KEY_6 MOV A, #8 AJMP KEY_7

KEY_6: MOV A, #12 KEY_7: ADD A, R4 PUSH ACC KEY_8: ACALL DELAY ACALL KS JNZ KEY_8 POP ACC RET

NEXT: INC R4 MOV A, R2

JNB ACC.3, KEY RL A

MOV A,R2 AJMP KEY_3 KS: MOV DPTR, #0FF21H

MOV A, #00H MOVX @DPTR, A INC DPTR

MOVX A,@DPTR CPL A

ANL A, #0FH RET

ORG 2000H PRINT:-------RET

第7章 程序存储器拓展和数据存储器拓展 8155命令字:

TM2,TM1=01;停止定时器/计数器

TM2,TM1=10;若正在计数,计数长度减为0时停止计数 TM2,TM1=11;启动,置方式和长度后立即启动计数 若正在计数,溢出后按新的方式和长度计数。 8155状态字

8155的定时器(14位的减1计数器) M2M1=00: 输出单个方波 M2M1=01:输出连续方波 M2M1=10:输出单个脉冲 M2M1=11:输出连续脉冲

基本输入方式,B口定义为基本输出方式,对输入脉冲进行16分频,则8155的I/O初始化程序为: START:MOV DPTR,#7F05H ;定时器高8位地址7F05H MOV A,#40H ;定时器高字节送A MOVX @DPTR,A ;装入高字节 DEC DPTR MOV A,#10H

MOVX @DPTR,A; 装入定时器低字节 MOV DPTR,#7F00H;指向命令状态口

MOV A,#0C2H ;设置命令字[A入B出] MOVX @DPTR,A ;装入命令字,启动定时器 · 读8155RAM(7E00~7EFF)的F1H单元内容: MOV DPTR,#7EF1H MOVX A , @DPTR ; · 将立即数41H写入8155RAM的20H单元中: MOV A,#41H MOV DPTR,#7E20H MOVX @DPTR,A;

2764的地址范围:0000~1FFFH;6264的地址范围:2000H~3FFFH

第6章 定时器/计数器

1. 使用T0定时,使得由P0.7输出周期为2ms的方波。设单片机时钟为6MHz。使用方式0和方式1分别实现。请编制程序。

1)计算定时器初值X。 X= 2^13 — 500 = 8192—500 = 7692换算成16进制数为1E0CH用高八位和低五位表示(TH0、TL0):F00CH

2)编制初始化程序:T0工作在方式0,方式控制字为00H,TH0=F0H,TL0=0CH 编程: ORG 1000H MOV TMOD,#00H; * MOV TH0,#0F0H MOV TL0,#0CH MOV IE,#82H SETB TR0 WAIT:SJMP WAIT 3)编制中断程序:

ORG 0000H ; 上电复位入口地址 LJMP 1000H

计数初值的计算:

ORG 000BH LJMP TINT ORG 300H TINT: CPL P0.7 MOV TH0,#0F0H MOV TL0,#0CH MOV IE,#82H RETI

2. 设8031时钟频率为12MHz,请编出利用定时器/计数器T0在P1.0引脚上输出周期为2s的方波程序。 1)计算定时器初值X。 X=216 — 50ms/1us = 15536

换算成16进制数为3CB0H 2)编制初始化程序:

T0工作在方式1,方式控制字为01H,TH0=3CH,TL0=B0H 编程: ORG 1000H MOV TMOD,#01H MOV TH0,#3CH 13

MOV TL0,#0B0H MOV IE,#82H SETB TR0; MOV TCON,#10H* MOV R0, #14H WAIT:SJMP WAIT 3)编制中断程序: ORG 0000H ; 上电复位入口地址 LJMP 1000H ORG 000BH AJMP TINT ORG 0080H TINT: DJNZ R0, NEXT; CPL P1.0 MOV R0, #14H NEXT: MOV TH0,#3CH MOV TL0,#0B0H MOV IE,#82H RETI (1)最大计数量:nmax=2=8192

(2)已知要求的计数量n,则计数器初值为:

计数器以增1的方式计数,溢出时申请中断。 1、根据定时值计算出所需要的计数时钟周期数N。

t=Tc*N

N=t /Tc

Tc——计数时钟周期=机器周期=振荡周期*12 2、根据选择的工作方式,计算计数器溢出所需的计数初值X

方式0:(13位)X = 2 — N 方式1:(16位)X = 2 — N 方式2:(8位) X = 2 — N 定时时间 = 振荡周期*12*(2 — X) X= 2 — t/(Tc*12)= 2 — t * f /12 3、将X化为16进制数装入TH和TL中

方式0:(M1 M0=0 0) 13位定时/计数器方式 16位寄存器只用13位,当TLx的低5位溢出时向THx进位,而THx溢出时向中断标志TFx进位——硬件置位TFx,申请中断 相关参数的计算:

n

n

n

81613

x=213 - n=8192 - n

(3)最大定时时间:tmax=2×12/fosc=8192×12/fosc (4)已知要求的定时时间t,则定时器的初值为:

13

x=213 - t×fosc/12=8192 - t×fosc/12

求得初值以后,应将x分配到TLx和THx: (TLx)=000x4x3x2x1x0B (THx)=x12x11x10x9x8x7x6x5B 方式1:(M1 M0=0 1) 16位定时/计数器方式 结构图同方式0,TL1和 TH1都是8位 相关参数的计算:

(1)最大计数量: nmax=2=65536

(2)已知要求的计数量n,则计数器的初值为:

16

x=216 - n=65536 - n

16

(3)最大定时时间:tmax=2×12/fosc=65536×12/fosc (4)已知要求的定时时间t,则定时器的初值为:

x=216 - t×fosc/12=65536 - t×fosc/12

求得初值以后,应将x分配到TLx和THx:

方式2(M1 M0=1 0)自动恢复初值的8位计数器方式0和方式最大只能到1若用255。

于循环定时/计数时,每次计满溢出后,计数器全部为0,第二次计数相关参数的计算如下:

8

器还需重新装入计数初值。如此反复,不仅影响到定时精度,也给程(1)最大计数量:nmax=2=256 序设计带来不便。方法2则可以解决此问题,它具有自动重载功能。(2)已知要求的计数量n,则计数器的初值为:

8

方式2有利于提高定时精度,比较适合用作精确的脉冲信号发生器, x=2- n=256 - n

8

或者串行口波特率发生器。但该方式是8位计数结构,计数值有限,(3)最大定时时间:tmax=2×12/fosc=256×12/fosc