12f675 c语言,PIC12F675两通道的AD转换的汇编程序

;程序功能:上电开机:PIN5为高电平,绿灯亮;PIN2,PIN3为低电平,红灯灭;

;        轮流检测PIN6,PIN7脚电平,欠压3.9V,10V,红灯亮,绿灯灭,过压5.9V,15.9V

;        红灯亮,绿灯灭,alram为TTL高电平,过压锁死

LIST P=12F675

INCLUDE

__CONFIG(B'11000101110100')

;Highest band gap voltage,0,0,Data memory is not protected

;Program memory is code-protected,BOD enabled,MCLR pin is MCLR function

;PWRT enabled,WDT disabled,INTOSC oscillator

;**************************************

READH     EQU 2Ah            ;读到的高2位数据

READL     EQU 2Bh            ;读到的低8位数据

SOUH      EQU 40h            ;欠压设置,高2位存储地址

SOU       EQU 41h            ;欠压设置,低8位存储地址

RLTH      EQU 42h            ;过压设置,高2位存储地址

RLT       EQU 43h            ;过压设置,低8位存储地址

ORG      0000H

GOTO     MAIN

ORG      0004H

GOTO     ADBEGIN

ORG      0030H

MAIN

BCF      STATUS,RP0 ;BANK 0

CLRF     GPIO

MOVLW    07H

MOVWF    CMCON      ;关闭比较器

BSF      STATUS,RP0 ;BANK 1

CALL     3FFH       ; 读内部振荡出厂校准字,返回值在W寄存器内

MOVWF    OSCCAL     ;校准晶振

MOVLW    B'00001011';TRISIO 三态控制器

MOVWF    TRISIO     ;设置TRISIO方向控制器,GP0,GP1,GP3为输入口

MOVLW    B'00010011'

MOVWF    ANSEL      ;8分频晶振,AN0AN1为模拟口,AN2AN3为数字口

BANKSEL  OPTION_REG

MOVLW    B'00000000';将预分频器分配给TIMER0 模块,2分频

MOVWF    OPTION_REG ;

BANKSEL  INTCON

MOVLW    B'10100000'  ;允许全局中断,禁止外围中断,允许TRMO中断,禁止GP2/INT外部中断

MOVWF    INTCON        ;禁止GPIO端口电平变化中断,TMR0寄存器没有溢出,未发生GP2/INT中断

;GP5:GP0 引脚电平均未发生变化

MOVLW    02H

MOVWF    24H      ;AD通道设置选择

MOVLW    D'10'

MOVWF    25H       ;过压后延时采样,10*90uS=900uS

;********************************************

;欠压设置2.5V,5V路对应值3.8V,15V路对应值10V

MOVLW    0002H

MOVWF    SOUH

MOVLW    0000H

MOVWF    SOU

;*********************************************

;过压设置值3.9V,5V路对应值5.9V,15V路对应15.9V

MOVLW    0003H

MOVWF    RLTH

MOVLW    0020H

MOVWF    RLT

MOVLW    B'10000001'

MOVWF    ADCON0     ;右对齐,参考电压Vdd,模拟通道0

BANKSEL  TMR0

MOVLW    D'242'

MOVWF    TMR0

GOTO     $

;*********************************************

;定时中断后开始AD转换

ADBEGIN

BTFSC    INTCON,T0IF  ;是否是定时器TMR0中断

BANKSEL  ADCON0

BSF      ADCON0,GO  ;开始转换

ADWAIT

BTFSC    ADCON0,GO

GOTO     ADWAIT        ;等待转换完成

;**********************************************

;AD转换后数据判断处理

READ

BANKSEL  ADRESH        ;自动设置存储地址bank

MOVF     ADRESH,W     ;读电压值高2位,

CLRF     STATUS

MOVWF    READH        ;读到的高2位数据放到vrevh寄存器

BANKSEL  ADRESL        ;自动设置存储地址bank

MOVF     ADRESL,w      ;读电压低8位

CLRF     STATUS

MOVWF    READL

;*****************************************************

LOWPOWER

MOVF     SOU,W

SUBWF    READL,W

BTFSS    STATUS,C;没有借位,跳过

GOTO     JUMP1

MOVF     SOUH,W

CONTIUE1

SUBWF    READH,W

BTFSS    STATUS,C ;没有借位,跳过

GOTO     ALARM0

OVERPOWER

MOVF     RLT,W

SUBWF    READL,W

BTFSS    STATUS,C   ;没有借位,跳过

GOTO     JUMP2

MOVF     RLTH,W

CONTIUE2

SUBWF    READH,W

BTFSS    STATUS,C  ;;没有借位,跳过

GOTO     NORMAL

GOTO     ALARM1

;*****************************************

;时间到,准备选择通道和赋值

LOOP

DECFSZ   24H,F

GOTO     SKIP

BANKSEL  ADCON0

MOVLW    B'10000001'

MOVWF    ADCON0     ;右对齐,参考电压Vdd,模拟通道0

MOVLW    D'2'

MOVWF    24H

GOON

BCF      INTCON,T0IF;恢复定时器继续判断

BANKSEL  INTCON

BSF      INTCON,7

BANKSEL  TMR0

MOVLW    D'242'

ADDWF    TMR0,F

GOTO     $

;***************************************************

;子程序

SKIP

BANKSEL  ADCON0

MOVLW    B'10000101'

MOVWF    ADCON0     ;右对齐,参考电压Vdd,模拟通道0

GOTO     GOON

JUMP1

INCFSZ   SOUH,W

GOTO     CONTIUE1

JUMP2

INCFSZ   RLTH,W

GOTO     CONTIUE2

NORMAL

BANKSEL  GPIO

BTFSC    22H,0    ;为0跳过

GOTO     BACK

BSF      GPIO,2   ;绿灯亮

BCF      GPIO,4   ;红灯灭

BACK

BCF      22H,0

GOTO     LOOP

ALARM0

BSF      22H,0

BANKSEL  GPIO

BCF      GPIO,2   ;绿灯灭

BSF      GPIO,4   ;红灯亮

GOTO     LOOP

ALARM1

DECFSZ   25H,F    ;为0则跳

GOTO     LOOP

BANKSEL  GPIO

BSF      GPIO,5   ;关机

BCF      GPIO,2   ;红灯亮

BSF      GPIO,4   ;绿灯灭

GOTO     $

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值