合泰单片机ADC转换程序
;数码管段码接法A-PD0,B-PD1....G-PD6,H-PD7
;数码管位码接法OM0-PC0...COM4-PC3
;完整源码下载:http://www.51hei.com/f/htadzh.rar
;;AD输入脚-PA0
include HT66F50.inc
ORG0000H
JMPA1
ORG0014H ;多功能中断入口地址
JMPZD1
ORG1CH ;ADC中断入口地址
JMPISR_ADC
ORG0030H
Q1:
DC03FH; 0
DC006H; 1
DC05BH; 2
DC04FH; 3
DC066H; 4
DC06DH; 5
DC07DH; 6
DC007H; 7
DC07FH; 8
DC06FH; 9
DC077H; A
DC07CH; B
DC039H; C
DC05EH; D
DC079H; E
DC071H; F
A1:
CLR[98H];AD数据高8位存储器
CLR[99H];AD数据低8位存储器
MOVA,0;显示内容
MOV[8AH],A;第一位数码管段码显示内容寄存器
MOVA,0;显示内容
MOV[8BH],A;第二位数码管段码显示内容寄存器
MOVA,0;显示内容
MOV[8CH],A;第三位数码管段码显示内容寄存器
MOVA,0;显示内容
MOV[8DH],A;第四位数码管显示内容寄存器
MOVA,08H;跟CP1C寄存器设置要求选择数据
MOVCP1C,A;设置PC口为I/0口而不是中断口
CLRPBC;设置pc 口为输出口
CLRPDC;设置PD 口为输出口
MOVA,1;设置初始显示位码显示第一位
MOV[80H],A;位码寄存器
MOVA,8AH;设置对应第一位段码寄存器
MOVMP0,A;间接寄存器指针
MOVA,00000000B;设置TM2 计数时钟位为fSYS/4
MOVTM2C0,A
MOVA,11000001B ;设置TM2中断为定时/计数模式选择比较器A匹配
MOVTM2C1,A
MOVA,LOW 5000;设置中断时间为5000个时钟周期
MOVTM2AL,A;低8位
MOVA,HIGH 5000;设置中断时间为5000个时钟周期
MOVTM2AH,A;高8位
MOVA,00010000B;打开AD电源 并ADRFS=1
MOVADCR0,A;ADRH为bit 3~bit 0,ADRL为bit 7~bit 0
MOVA,00000110B;AD转换时钟为fSYS/64,
MOVADCR1,A;VREFS=0选择内部参考电压
MOVA,00000001B;选择AD通道为AN0
MOVACERL,A
clr START ; 启动AD转换 0→1→0 启动
set START ;
clr START ;
CLRADF;清标志
SETADE;开AD中断
CLRMF0F;清多功能中断0标志
CLRT2AF;清定时器2较器A中断标志
SETMF0E;使能多功能0中断
SETT2AE;使能定时器2较器A中断
SETEMI;使能总中断
SETT2ON;开始计数
A2:
CALLCL1;调用2位16进制数转换为5位10进制数子程序
MOVA,[9DH];显示内容
MOV[8AH],A;第一位数码管段码显示内容寄存器
MOVA,[9CH];显示内容
MOV[8BH],A;第二位数码管段码显示内容寄存器
MOVA,[9BH];显示内容
MOV[8CH],A;第三位数码管段码显示内容寄存器
MOVA,[9AH];显示内容
MOV[8DH],A;第四位数码管显示内容寄存器
JMPA2
;*******************************************************
;2位16进制数转换为5为10进制数子程序(0ffh=65535)
;*******************************************************
CL1:
MOVA,[98H]
MOV[9AH],A
MOVA,[99H]
MOV[9BH],A
CALLCL2
MOVA,00001111B
ANDA,[9EH]
MOV[9AH],A
SWAP[9EH]
MOVA,00001111B
ANDA,[9EH]
MOV[9BH],A
MOVA,[9CH]
MOV[9EH],A
MOVA,00001111B
ANDA,[9DH]
MOV[9CH],A
SWAP[9DH]
MOVA,00001111B
ANDMA,[9DH]
RET
CL2:
CLR[9CH]
CLR[9DH]
CLR[9EH]
MOVA,16
MOV[9FH],A
CL3:
CLRC
RLC[9BH]
RLC[9AH]
MOVA,[9EH]
ADCA,[9EH]
DAA[9EH]
MOVA,[9DH]
ADCA,[9DH]
DAA[9DH]
MOVA,[9CH]
ADCA,[9CH]
DAA[9CH]
SDZ[9FH]
JMPCL3
RET
;*******************************************************
;中断服务子程序
;*******************************************************
ZD1:
MOV[0F0H],A;压栈ACC到0F0H
MOVA,STATUS;
MOV[0F1H],A;压栈status标志寄存器到0F1H
CLRPB;清PC(清屏幕)
MOVA,Q1;数据表地址
CLRTBHP;清数据表地址高位否则出错
ADDA,IAR0;利用间接寄存器找到要显示段码所在数据表的地址
MOVTBLP,A;表格指针寄存器TBLP
TABRDPD;查表并将数据存到PD口寄存器
MOVA,[80H];位码寄存器
MOVPB,A;将位码寄存器的数存到PC口寄存器
;段码和位码的数都有了所以数码管被点亮
INCMP0;间接寄存器指针加1指向下一个段码寄存器
RL[80H];左移位码寄存器控制下一个数码管
SNZ[80H].5;判断是否控制完4个数码管
JMPZD2;退出中断继续
MOVA,1;是则从新初始化寄存器数据
MOV[80H],A;
MOVA,8AH;千位数码管对应寄存器
MOVMP0,A;存到间接寄存器0
ZD2:
MOVA,[0F1H];弹栈后进先出先进后出
MOVSTATUS,A;弹栈0F1H的数到标志寄存器
MOVA,[0F0H];弹栈0F0H的数到acc
CLRMF0F;清多功能标志
CLRT2AF;清定时器2比较器A标志
RETI;中断返回
ISR_ADC:
MOV[0F0H],A;压栈ACC到0F0H
MOVA,STATUS;
MOV[0F1H],A;压栈status标志寄存器到0F1H
MOVA,ADRH
MOV[98H],A
MOVA,ADRL
MOV[99H],A
MOVA,[0F1H];弹栈后进先出先进后出
MOVSTATUS,A;弹栈0F1H的数到标志寄存器
MOVA,[0F0H];弹栈0F0H的数到acc
clr START ;highpulseon start bit to initiate conversion
set START ;reset A/D
clr START ;start A/D
RETI;中断返回
;*******************************************************
;延时子程序
;*******************************************************
M001:
MOVA,1
MOV[85H],A
M002:
MOVA,200
MOV[86H],A
M003:
MOVA,250
MOV[87H],A
M004:
SDZ[87H]
JMPM004
SDZ[86H]
JMPM003
SDZ[85H]
JMPM002
RET
END
合泰单片机ADC转换程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)