锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

汇编51单片机、ADC0832测电阻、LCD1602显示

时间:2023-01-24 22:00:00 57r6电阻cs1206低阻值电阻

上单片机课程的老师要求用汇编程序,看到网上有很多C,希望对想用汇编做事的人有所帮助。

先了解汇编程序,51单片机,ADC0832接收数据时序,LCD1602显示原理更好地理解程序。这些模块的数据CSDN已经有很多人发过了。想了解的百度可以在这个网站上搜索。

仿真图:

程序:

   AD_CLK EQU P2.2    AD_DAT EQU P2.4    AD_CS  EQU P2.3     AD_TEMP   EQU   2FH    ;AD采样值存储单元     RS BIT P2.7    RW BIT P2.6    EN BIT P2.5  ORG 0300H AJMP MAIN  MAIN: mov a,#00h       mov b,#00h  AD_CONV:             SETB AD_CS          ;转换周期开始             CLR  AD_CLK             CLR  AD_CS          ;CS置0,片选有效             SETB AD_DAT         ;DI置1,起始位             SETB AD_CLK         ;第一个脉冲             CLR  AD_DAT         ;在负跳变之前加一个DI反转操作             CLR  AD_CLK             SETB AD_DAT         ;DI置1,设为单通道             SETB AD_CLK         ;第二个脉冲             CLR  AD_DAT             CLR  AD_CLK             CLR  AD_DAT         ;DI置0,选择通道0             SETB AD_CLK         ;第三个脉冲             SETB AD_DAT             CLR  AD_CLK             NOP             NOP             SETB AD_CLK         ; 第四个脉冲              MOV  R1,#08H        ;读取8位数据,计数器初值,  AD_READ:    CLR  AD_CLK         ;下降沿             MOV  C,AD_DAT       ;读取DO端数据             RLC A               ;C移入A,高位在前             SETB AD_CLK         ;下一个脉冲             DJNZ R1,AD_READ     ;没读完继续             SETB  AD_CS             MOV AD_TEMP,A       ;存储转换结果AD_TEMP   MOV B,#51     ;B=51,A=254 本来#33h     255/5    255/10 DIV AB ADD A,#'0' MOV R5,A ;-------------------------------      MOV A,B         ;A= B=50   MOV B,#0AH      ;A=50,B= 10   MUL AB          ;A=244,B=1=256(11101000=1000000+11111000=256+244)   ADD A,B         ;A=245、加B是因为B值除以51后余数为1,要加低位计算,否则会漏掉一些数字   MOV R0,A        ;保存低值,因为以后要用A   MOV A,#05H      ;A=5,B=A赋值为5,因为B高,B=1实际是B=100000000=256除以51后为五   MUL AB          ;A=5,B=0   MOV R1,A        ;这个5的值是小数点后的一部分,还可能因为最开始A输入的值的不同而等于零,A实际数字是以A=0xfe计算收入   MOV A,R0        ;A=245,B=0;   MOV B,#33H      ;A=245,B=51   DIV AB          ;A=4,B=41   ADD A,R1  ADD A,#'0' MOV R4,A ;-------------------------------       MOV A,#0AH      ;A=10,B=41   MUL  AB         ;A=9A=154,B=1=256   ADD A,B         ;A=9B=155,B=1=256   MOV R0,A        ;A=155,R0=155   MOV A,#05H      ;A=5,B=1   MUL AB          ;A=5,B=0   MOV R1,A        ;R1=A=5,B=0   MOV A,R0        ;A=155,B=0   MOV B,#33H      ;A=155,B=51=0X33   DIV  AB         ;A=3,B=2   ADD A,R1       ;R1=8  ADD A,#'0' MOV R3,A ;----------------------------------  LCD1602:         CALL INIT        MOV A ,#40H                      CALL XML    CALL WRITE_ZFC     MOV A ,#80H      CALL XML       MOV A,#'R'   CALL XSJ    mov a,#':'   call xsj           MOV A ,R5            CALL XSJ    MOV A,R4   CALL XSJ    MOV A,R3   CALL XSJ    CALL DELAY1   CALL DELAY1   CALL DELAY1   CALL DELAY1    JMP $                                      XML:      CLR RS                  CLR RW                     CLR EN    MOV P0 ,A    CALL DELAY     SETB EN    CALL DELAY     CLR EN     RET         XSJ:     SETB RS         CLR RW    CLR EN    MOV P0 ,A    CALL DELAY     SETB EN    CALL DELAY     CLR EN     RET    INIT:                                           CALL DELAY    MOV A,#38H       CALL XML    MOV A,#0CH           CALL XML    MOV A,#06H      CALL XML    MOV A,#01H      CALL XML    RET  WRITE_ZFC: MOV R0 ,#48                 DELAY:  MOV R6 ,#25                                          D2:  MOV R7,#18   DJNZ R7 ,$            DJNZ R6 ,D2   RET  DELAY1: MOV R6 ,#200      ;按键延时 D3:  MOV R7,#200   DJNZ R7 ,$   DJNZ R6 ,D3   RET END  

说明:理解ADC0832,注意接收数据的顺序ADC0832接收电压模拟量,然后转换为数字量,并将数据发送给MCU。对于8位二进制数据,对应的最大十进制数为255。假设提供的滑动变阻器最大电阻为500,则接收到的数据(假设为255)除以51可获得100位(5)。同样,其他最大电阻不同的滑动变阻器也可以修改相应的除数。其原理是将电压映射到电阻的函数关系。将百位、十位、个位存储在不同的寄存器或地址中,然后将数据给出LCD1602显示。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章