微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 松翰单片机内部8位分辨率ADC

松翰单片机内部8位分辨率ADC

时间:04-03 来源:互联网 点击:

;目的学习内部8位分辨率ADC及数据处理
;完整代码下载:http://www.51hei.com/f/shrad.rar
CHIP SN8F27E65
//{{SONIX_CODE_OPTION
.Code_Option WDT_CLK Flosc/4
.Code_Option Reset_Pin P04
.Code_Option LVD LVD_Max ; 3.3V Reset
.Code_Option Watch_Dog Disable ;关闭看门狗
.Code_Option Low_Fcpu Flosc/1
.Code_Option High_Clk IHRC_16M ; Internal 16M RC Oscillator
.Code_Option High_Fcpu Fhosc/1
.Code_Option Security Enable
.Code_Option Noise_Filter Enable
//}}SONIX_CODE_OPTION


DATAC EQU P4M
DATA EQU P4
LEDC EQU P0M
LED EQU P0

.DATA;数据
ORG 0
TEMP DS 1
ACCBUF DS 1
PflagBUF DS 1

.CODE;程序代码
ORG 0000H
JMP A0
ORG 000BH
JMP T0
ORG 0015H
A0: B0BCLR FT0IEN;关闭T0中断
B0BCLR FT0ENB;禁止T0中断
MOV A,#16;设置T0时钟
B0MOV T0M,A;
MOV A,#16;装初值
B0MOV T0C,A;
B0BCLR FT0IRQ;清中断标志
B0BSET FT0IEN;开T0中断
B0BSET FT0ENB;允许T0中断
B0BSET FGIE;开总中断
MOV A,#3;显示值
MOV 41H,A

MOV A,#2;显示值
MOV 42H,A
MOV A,#1;显示值
MOV 43H,A
MOV A,#0;显示值
MOV 44H,A
;*********************************************
;显示设置
;*********************************************
A1: MOV A,#11111110B ;显示位码
MOV 31H,A
MOV A,#4;显示位数
MOV 33H,A
B0MOV H,#0 ; 清“H”以寻址RAM bank 0。
B0MOV L,#41H ; 设定寄存器地址。

A2:
CLR ADM;清ADC 模式寄存器ADM

CLR ADR;清ADR寄存器

MOV A,#00000001B
B0MOV P5CON,A;选择P5.0为ADC输入通道

MOV A,#00000000B
B0MOV P5M,A;设置P5口为输入模式

MOV A,#00000000B
B0MOV P5UR,A;禁止P5口为上拉模式

B0BSET FADENB;ADC使能
CALL M005;延时
MOV A,#00001000B
OR ADM,A;设置ADCHS[3:0]选择ADC 输入通道

B0BSET FGCHS;使能ADC 输入通道

B0BSET FADS;开始AD 转换。
A3:
B0BTS1 FEOC; 判断是否转换完成
JMP A3
;*************************
; MOV A,ADB
MOV A,#0
MOV 60H,A
MOV A,ADB;8位模式下转换后数据存在ADB中
MOV 61H,A
;****************************
CALL CL1;调用数据处理
MOV A,64H;将处理后的数据显示出来
MOV 44H,A;千位
MOV A,63H
MOV 43H,A;百位

MOV A,62H
MOV 42H,A;十位

MOV A,61H
MOV 41H,A;个位

B0BCLR FEOC;清标志
CALL M008;延时

JMP A2

;*********************************************
;T0中断
;*********************************************
T0: B0BCLR FT0IEN;关T0中断
B0BCLR FT0ENB;禁止T0中断
B0XCH A,ACCBUF;压栈
B0MOV A,PFLAG;
B0MOV PFLAGBUF,A;
MOV A,#0FFH;清显示
B0MOV DATAC,A;
B0MOV DATA,A;
MOV A,#0FFH;
B0MOV LEDC,A;
MOV A,#0FFH;
B0MOV LED,A;
T1:
MOV A,#0FFH;设置为输出口
B0MOV DATAC,A;
B0MOV Y,#Q1$M;编码表地址
B0MOV Z,#Q1$L;编码表地址
B0MOV A, @HL;间接寻址
ADD Z,A;寻找要显示编码
MOVC ;查表高八位存在R低八位存在ACC
B0MOV DATA,A;数据输出


MOV A,#0FFH;设为输出口
B0MOV LEDC,A

MOV A,31H;位码
B0MOV LED,A
MOV A,31H;处理位码的数由于没有RL只有RLC现在这里处理C
MOV 32H,A
RLC 32H
RLCM 31H;移动位码
INCMS L;显示数据控制寄存器处理
CALL M001;延时提高亮度
MOV A,#0FFH;清显示
B0MOV DATAC,A
B0MOV DATA,A
MOV A,#0FFH
B0MOV LEDC,A
MOV A,#0FFH
B0MOV LED,A
DECMS 33H;自动减1判断是否也显示完成
JMP T1

MOV A,#11111110B ;显示位码
MOV 31H,A
MOV A,#4;显示位数
MOV 33H,A
B0MOV H,#0 ; 清“H”以寻址RAM bank 0。
B0MOV L,#41H ; 设定寄存器地址。
B0MOV A,PFLAGBUF;弹栈
B0MOV PFLAG,A;
B0XCH A,ACCBUF;
MOV A,#16;设T0时钟
B0MOV T0M,A;
MOV A,#16;重装初值
B0MOV T0C,A;
B0BCLR FT0IRQ;清中断标志
B0BSET FT0IEN;开中断
B0BSET FT0ENB;允许中断
B0BSET FGIE;开总中断
RETI;

CL1:
;******************************
; MOV A,#60H
; MOV 62H,A
;
; MOV A,#11111111b
; MOV 61H,A

;***************************
CALL CL2
MOV A,65H
AND A,#11110000B
MOV 60H,A
SWAP 60H
MOV 62H,A;十位
MOV A,65H
AND A,#00001111B
MOV 61H,A;个位
MOV A,63H;万位
MOV 65H,A

MOV A,64H
AND A,#00001111B
MOV 63H,A;百位
MOV A,64H
AND A,#11110000B
MOV 64H,A
SWAPM 64H;千位
RET


CL2: MOV A,#0
MOV 63H,A
MOV 64H,A
MOV 65H,A
MOV A,#16
MOV 67H,A
CL3: B0BCLR FC
RLCM 61H;(低8位)
RLCM 60H;(高8位)
MOV A,65H;个十位
ADC A,65H;
DAA ;
MOV 65H,A;
MOV A,64H;百千位
ADC A,64H;
DAA ;
MOV 64H,A;
MOV A,63H;万位
ADC A,63H;
DAA ;
MOV 63H,A;

DECMS 67H;
JMP CL3;
RET;







;******************************************
;延时子程序
;******************************************
M001: MOV A,#1
MOV 51H,A
M002: MOV A,#24
MOV 52H,A
M003: MOV A,#250
MOV 53H,A
M004: DECMS 53H
JMP M004
DECMS 52H
JMP M003
DECMS 51H
JMP M002
RET

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top