DATABUF DATA 30H ;测试数据变量
ORG 8000H LJMP MAIN ORG 8100H MAIN: MOV SP, #60H MOV DATABUF, #33H MOV DPTR, #3F00H MOV A, DATABUF MOVX @DPTR, A NOP MOV
;初始化堆栈
;用户变量赋初值
;访问8155内部RAM地址00单元 ;向00地址单元写数 ;用户变量清0 ;读数
;保存数据
DATABUF,#00H
MOVX A, @DPTR MOV DATABUF, A SJMP ;
$
END
参考程序3:8155定时器使用
;――――――――――――――――――――――――――――――――――― ;实验内容:
;用8155定时器定时,每隔1s依次-----实际时间计算有错误,请同学自行计算相应的定时时间并验证! ;读出8155内部RAM的数据送PB口显示
;――――――――――――――――――――――――――――――――――― ORG 8000H LJMP MAIN ORG 8100H
MAIN: MOV MOV MOV MOV MOV MOV
SP, #60H 22H, #00H
;RAM首址写入22H,23H单元 ;R0计数
;指向RAM首址 ;数据初值送A ;写入数据
23H, #3FH R0, #0FFH DPTR, #3F00H A, #00H
EY:
MOVX @DPTR, A INC INC DJNZ B1: MOV MOV B2:
DPTR A
R0, EY R0, #22H R1, #0AH
;R0!=0,继续写 ;写入结束,22->R0 ;R1软件计数
Page 13 of 17
MOV DPTR, #7F00H MOV A, #0C2H MOVX @DPTR,A MOV DPTR, #7F04H MOV A, #0FFH MOVX @DPTR,A
MOV
A, #83H
INC DPTR MOVX @DPTR,A
MOV DPTR, #7F00H
MOV A, #0C2H MOVX @DPTR,A MOV DPTR, #7F00H A2: MOVX A,@DPTR JNB ACC.6,A2 DJNZ R1,B2
MOV R1, #0AH MOV
DPH,23H
MOV DPL,22H MOVX A,@DPTR MOV DPTR, #7F02H MOVX @DPTR,A INC @R0 CJNE @R0, #0FFH,B2 SJMP $
; END ;DPTR指向命令口
;写入命令,启动计数器,PB口输出 ;DPTR指向定时器低8位 ;写入低8位计数值
;写入高8位计数值 ;DPTR指向命令口
;指向命令/状态口 ;读入8155状态
;计数未到终值,等待 ;不到,返回重新启动
;取数据
;输出到PB口显示 ;22H单元的内容加1 ;数据未取完,返回 ;程序功能完成
Page 14 of 17
实验五 A/D转换实验
1. 实验目的
掌握A/D芯片ADC0809与单片机的接口方法及ADC0809芯片性能;了解单片机实现数据采集的方法。
2. 实验设备及器件 IBM PC机 DP-51PRO单片机综合仿真实验仪
3. 实验内容
(1)编写一段程序,使P3.5输出不同频率的脉冲,控制蜂鸣器发出不同的音调,并且输入0~255的数据可改变蜂鸣器的音调。蜂鸣器驱动原理如图3.38所示。
(2)编写一段程序,通过ADC0809实现单片机对电位器模拟电压的采集,使用采集到的数据控制蜂鸣器的音调。ADC0809与单片机的接口原理如图3.39所示。
(3)ADC0809的时钟从B2区的时钟源获取,选用时钟源的1/32分频(也可以通过D触发器将单片
机ALE信号分频获取)。
一台 一台
4. 实验要求 使用实验仪上的ADC0809做A/D转换器,实验仪上的电位器提供模拟量输入,编写程序将ADC0809采集到的模拟量转换成数字量改变蜂鸣器的声调。
5. 实验步骤
① 使用导线把A2区的J66接口与B4区的J1接口从A0~A2到ADDA~ ADDC分别对应相连; ② 使用导线把A2区J63接口的A15与B4区J1接口的CS相连; ③ 使用导线把A2区J58接口的INT0与B4区J1接口的EOC相连; ④ 使用导线把A2区J58接口的T1与D4区J8接口的BUZZ相连; ⑤ 使用导线把B4区J1接口的+Vref、-Vref分别与VCC、GND相连;
⑥ 使用导线把B4区J44接口的IN0与D2区J18中间接口相连;
⑦ B2区J112的1/32分频与B4区J1的CLK连接,短接B2区JP20跳线,X2上接上晶振; ⑧ 使用短路片把W2电位器与VCC、GND相连; ⑨ 编写汇编程序,实现本实验的要求;
Page 15 of 17
⑩ 使用仿真器调试程序。
6. 实验预习要求
理解本实验硬件结构,可以先把程序编好,然后在Keil C51环境下进行软件仿真。
7. 实验参考程序 AD0809 EQU TIME0H EQU
TIME0L EQU DAT0809
DATA
ORG 8000H AJMP MAIN
ORG 8003H
AJMP EXINT1 ORG 800BH
AJMP TIME0 ORG 8100H MAIN: MOV SP,#60H SETB IT0
SETB EX0 SETB
EA
MOV DPTR,#AD0809 MOVX @DPTR,A
MOV TMOD,#1 MOV TH0,#TIME0H MOV TL0,#TIME0L
SETB
ET0 SETB TR0
BUZZ: MOV R7,DAT0809 SETB P3.5 MOV R6,#3 DJNZ R6,$ DJNZ R7,$ MOV R7,DAT0809 CLR P3.5
MOV
R6,#3
7000H ;A/D转换通道0的地址 0000H ;采样频率设置 0000H 0030H
;存放采集到的数据
;外部中断0的入口地址
;定时器0入口地址
;设置外部中断0为边沿触发 ;中断INT0开放 ;总中断允许 ;启动AD0809
;设置定时器1为16位定时器
;赋初值 ;开定时器中断
;定时器运行
;采样到的电压数据量,控制P3.5翻转
Page 16 of 17
DJNZ DJNZ
R6,$ R7,$ BUZZ
AJMP
EXINT1: PUSH PSW
;外部中断1服务子程序
PUSH CLR MOV MOVX MOV SETB POP
POP
RETI TIME0: CLR MOV MOV MOV MOVX SETB RETI ;
END
ACC
EX0
DPTR,#AD0809
A,@DPTR
DAT0809,A
EX0 ACC PSW
TR0 TH0,#TIME0H TL0,#TIME0L DPTR,#AD0809
@DPTR,A
TR0
;读取A/D转换结果
;存放数据
;定时器0中断时间可换算为模拟量采样频率 ;赋初值
;重新启动A/D转换
Page 17 of 17