100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 基于51单片机及ADC0808的数字电压表数码管汇编语言proteus仿真程序设计

基于51单片机及ADC0808的数字电压表数码管汇编语言proteus仿真程序设计

时间:2023-09-29 14:30:43

相关推荐

基于51单片机及ADC0808的数字电压表数码管汇编语言proteus仿真程序设计

前言

大家好,上一条博客写了关于基于51单片机以及ADC0808的数字电压表,但是采用的C语言,本章讲一下采用汇编语言来实现电压的测量,同样采用数码管显示。

硬件设计

该设计采用的MCU同样是51单片机,ADC也是采用的TI的ADC0808,显示部分采用4位数码管,最终的测试电压范围为0~5V,这次的精度提高到约为0.01V,仿真图如下:

右下方是模拟的输入电压

部分汇编代码如下:(代码详细备注,方便阅读)

LED_0EQU30H;百分位LED_1EQU31H;十分位LED_2EQU32H;个位LED_3EQU33H;十位ADCEQU35HCLOCKBITP1.4;定义0808时钟位STBITP1.5EOCBITP1.6OEBITP1.7ORG0000HLJMP STARTORG000BHLJMP INT_T0ORG30HSTART:MOVLED_0,#00HMOVLED_1,#00HMOVLED_2,#00HMOVDPTR,#TABLE;表格数值赋到DPTRMOVTMOD,#02H;定时器选择方式2MOVTH0,#0F5H;防止数码管数位闪动,可设定的置为小于等于245的数MOVTL0,#00HMOVIE,#82H;开T0中断SETB TR0;T0开始计数WAIT:CLRSTSETB ST;上升沿清零SAR(SAR用来在A/D转化过程中存放暂态数字量)CLRST;下降沿启动ADC工作JNBEOC,$;等待转换结果SETB OE;ADC输出MOVADC,P2;读取AD转换结果CLROE MOVA,ADCMOVR7,A;R7储存AD转换后的结果MOVLED_3,#00H;清空十位MOVLED_2,#00H;清空个位MOVA,#00HLOOP1:ADDA,#20H;一位二进制码对应100mVDAA;结果转换成BCD码JNCLOOP2;Cy为0跳转,Cy为1继续执行MOVR4,A;R4储存百分位、十分位INCLED_2;个位加1MOVA,LED_2CJNE A,#0AH,LOOP4;个位不为10跳转,为10继续执行MOVLED_2,#00H;个位置0INCLED_3;十位加1LOOP4:MOVA,R4LOOP2:DJNZ R7,LOOP1;R7减1不为0跳转,为0继续执行ACALL BTOD1LCALL DISP;调用显示子程序LJMP WAITORG0200HBTOD1:MOVR6,A;R6储存R7为0后的A的值

附:http://www.jh-/archives/7313

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。