⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adtra.txt

📁 通过此代码能够实现AD转换功能,实现温度的AD转换
💻 TXT
字号:
$INCLUDE (C8051F020.inc)
SYSCLK      EQU      11059 ; 系统时钟频率
TC_10ms     EQU      (SYSCLK / 12) * 10; 
ROOMCODE    EQU      0xb930      ; ADC值左对齐
; ADC 数据变量
TEMPCODE:   DS    2              ;
            CSEG AT 0
            ljmp  Main
            org   7bh
            ljmp  ADC0_ISR       ; ADC0 转换结束中断
Temp_2      SEGMENT  CODE                 ; declare CODE segment
            RSEG  Temp_2                  ; select CODE segment
            USING 0                       ; using register bank 0
Main:
            mov   WDTCN, #0deh            ; 关闭看门狗
            mov   WDTCN, #0adh
            mov   SP, #STACK-1            ; 初始化堆栈指针
            acall SYSCLK_Init             ; 系统时钟源初始化
            mov   XBR2, #40h              ; 使能交叉开关,弱上拉
            orl   P1MDOUT, #40h           ; enable P1.6 (LED on target board)
            acall ADC0_Init               ; 初始化ADC0和温度传感器
            acall Timer3_Init             ; 初始化 Timer3
            acall Timer3_Start            ;使能 Timer3
            acall ADC0_Enable             ; 使能 ADC0
            setb  EA                      ; 开中断
            sjmp  $                       ; 等待

ADC0_ISR:
            push  PSW                     ; 保护现场
            push  acc
            clr   AD0INT                  ; 清ADC0中断标志
            mov   TEMPCODE, ADC0H         ;转换结果高位
            mov   TEMPCODE+1, ADC0L       ;转换结果低位
           clr   C
           mov   a, TEMPCODE+1           ; subtract LSBs
            subb  a, #LOW(ROOMCODE)
            mov   TEMPCODE+1, a           ; store new LSB
            mov   a, TEMPCODE             ; subtract MSBs (and carry)
            subb  a, #HIGH(ROOMCODE)
            mov   TEMPCODE,a              ; store new MSB
            setb  LED                     ; turn LED on.
            jnc   ADC0_ISR_END            ; 

ADC0_ISR_END:
            pop   acc
            pop   PSW
            reti

SYSCLK_Init:
            mov   OSCXCN, #67h            ; 使能外部振荡器
            clr   A                       ; 等待至少1毫秒
            djnz  acc, $                  ;  
            djnz  acc, $                  ; 
osc_wait:                                 ; poll for XTLVLD-->1
            mov   a, OSCXCN
            jnb   acc.7, osc_wait
            orl   OSCICN, #08h            ; 选择外部振荡器作为系统时钟源
            orl   OSCXCN, #80h            ; 打开丢失时钟监测器
            ret

Timer3_Init:
            mov   TMR3CN, #00h            ;停止Timer3,清T3溢出标志TF3,
            mov   TMR3RLH, #HIGH(-TC_10ms);重装载初值
            mov   TMR3RLL, #LOW(-TC_10ms)
            mov   TMR3H, #0ffh            ;设置为自动重装载
            mov   TMR3L, #0ffh
            anl   EIE2, #NOT(01h)         ;关闭T3中断

            ret

Timer3_Start:
            orl   TMR3CN, #04h            ; set TR3
            ret


ADC0_Init:
            clr   AD0EN                   ; 关闭ADC0
            mov   REF0CN, #07h            ; 
            mov   AMX0SL, #0fh            ;选择温度作为ADC的输入
            mov   ADC0CF, #((SYSCLK/2500) SHL 3) ;设置SAR时钟为 2.5MHz
            orl   ADC0CF, #01h            ; PGA Gain = 2
            mov   ADC0CN, #45h            ;
            ret

ADC0_Enable:
            setb	AD0EN                   ;使能ADC0
            orl   EIE2, #02h              ;ADC转换结束中断
            ret

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -