第四章 程序设计基础
4-1片内RAM 30H单元开始存放着一组用补码表示的有符号数,数目存于20H单元。编程统计出正数,0,负数的数目,分别存到21H,22H,23H单元。 ORG 0100H MOV 21H,#0 MOV 22H,#0 MOV 23H,#0 MOV R0,#30H LOOP: MOV A,@R0 CJNE A,#0 ,PD INC 22H SJMP DONE PD:JB ACC.7,FU INC 21H SJMP DONE FU:INC 23H DONE: INC R0 DJNZ 20H,LOOP SJMP $ END 4-2 片内RAM 20H-2FH.凡是满足奇偶校验的数据(1的个数为偶数)的数转存到片外8000H开始的数据区 ORG 0100H MOV R0,#20H MOV DPTR,#8000H MOV R2,#0FH LOOP: MOV A,@R0 JB PSW.0,DONE MOVX @DPTR,A INC DPTR DONE: INC R0 DJNZ R2,LOOP SJMP $ END 4-3 编程,把外部 RAM 1000H-10FFH的数据传送到2000H开始的区域 ORG 0100H MOV R3,#10H MOV R4,#20H MOV DPL,#00H MOV R2,#0 LOOP:MOV DPH,R3 MOVX A,@DPTR MOV DPH,R4 MOVX @DPTR,A INC DPL DJNZ R2,LOOP
SJMP $ END
4-4片内RAM 30H单元开始存放着一组无符号数,其数目在21H单元中。编程将其中最小的数存入21H ORG 0100H MOV R0,#30H MOV R2,21H MOV A,30H
LOOP: CJNE A,@R0,PD SJMP DONE PD:JNC DONE MOV 22H,@R0 XCH A,22H DONE: INC R0 DJNZ R2,LOOP MOV 21H,A SJMP $ END 4-5 编程实现片内RAM 30H单元开始的16个数按顺序颠倒过来 ORG 0100H MOV R0,#30H MOV R1,#40H MOV R2,#0FH LOOP:MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R2,LOOP MOV R2,#0FH MOV R0,#40H MOV R1,#3FH LOOP1: MOV A,@R0 MOV @R1,A INC R0 DEC R1 DJNZ R2,LOOP1 SJMP $ END
4-6 编程实现片内RAM 30H单元开始的16个数,存有最小数值的所在单元的内容改为0FFH
ORG 0100H MOV R0,#30H MOV R2,#16 MOV A,30H MOV 22H,#0 ;22H存放找到的16个数中的最小值
MOV 23H,#0 ;存放最小数值的地址放到23H LOOP: CJNE A,@R0,PD SJMP DONE PD:JNC DONE MOV 22H, @R0 MOV 23H,R0 XCH A,22H DONE: INC R0 DJNZ R2,LOOP MOV R0,23H MOV @R0,#0FFH SJMP $ END 4-7 编程实现P1.7=P1.6(P1.5?P1.4) ORG 0100H MOV C,P1.5 ANL C,/P1.4 MOV 20H,C MOV C,P1.4 ANL C,/P1.5 ORL C,20H ANL C,P1.6 MOV P1.7,C END 4-8编程统计片内RAM 30H单元开始的16个数,有多少数大于40,小于80,将结果存入40H单元中 ORG 0100H MOV R0,#30H MOV R2,#16 MOV 40H,#0 LOOP:MOV A,@R0 CJNE A,#40,PD SJMP DONE PD:JNC PD2 SJMP DONE PD2:CJNE A,#80,PD3 SJMP DONE PD3:JC COUNT SJMP DONE COUNT:INC 40H DONE:INC R0 DJNZ R2,LOOP SJMP $ END
第六章 中断系统
6-1 定时器T0和T1各有几种工作方式?请简述。 答:四种。 T0 T1 工作方式 最大计数模值 初值加载方式 最大计数模值 初值加载方式 方式0 213 人工加载 213 人工加载 方式1 216 人工加载 216 人工加载 28 自动加载 28 自动加载(常用于串口通信方式2 波特率发生器) 28 TH0、TL0被8位计数,无 分成两个相互中断产生,自独立的8位计动加载初值,数器;TL0既用于不需要中方式3 可做定时器也断的场合 可做计数器;TH0可做内部定时器。人工加载初值 6-2 已知单片机系统时钟频率fosc=12MHz,若要求定时值分别为0.1ms、1ms、10ms,定时器T0工作在方式0,方式1和方式3时,定时器对应的初值各为多少? 定时时间 工作方式0初工作方式1初工作方式2初工作方式3初值 值 值 值 0.1ms FC1CH FF9CH 9CH 9CH 1ms E018H FC18H 10ms D8F0H 6-3 定时器/计数器T0已预置为156,工作于方式2计数,现T0引脚上输入周期为1ms的脉冲,问: (1)此时T0的实际用途是? (2)在什么情况下,T0溢出? 答:(1)计数器 (2)T0可记录100个外部脉冲,即从开始启动工作,经过100ms 开始溢出。 6-4 设系统时钟为6MHz,利用T0和P1.0产生连续矩形波,高电平宽度为50us,低电平宽度为300us。 解:因为系统时钟为6MHz,则一个计数脉冲为2us,若T0工作于方式1,则P1.0输出高电平T0需记录25个脉冲,计数初值为216-25=FFE7H,,则P1.0输出低电平T0需记录150个脉冲,计数初值为216-150=FF6AH,编程如下
ORG 0000H LJMP MAIN ORG 000BH LJMP T00 ORG 0100H MAIN:MOV SP,#60H MOV TMOD,#01H
MOV TH0,#0FFH