历史上的今天
今天是:2024年11月12日(星期二)
2019年11月12日 | PIC12F675两通道的AD转换的汇编程序
2019-11-12 来源:51hei
;程序功能:上电开机: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
史海拾趣
|
假设DAC使用了一个反相运算放大器,C1=C2,A(0)=1000,若VREF=1V,问DAC在最怀情况下的最大精度? 反相放大器的环路增益=0.5×1000=500,因此增益误差为1/501=0.002。增益误差应该小于±0.5LSB,表示为: 增益误差=0.002… 查看全部问答> |
|
大家好,迷茫了很久,还是看不到方向,请有智慧的您帮忙吧,诚心请教 我毕业直接来到深圳,工作两年,第一年几乎虚度了,第二年用三星八位单片机汇编语言做了点简单的事(按键,led,定时器,i/o口发音,固定显示的液晶之类,硬件电路也 ...… 查看全部问答> |
|
我在做写入flash的时候写入的是113个字节的数据,A段的从1000开始写的!!! 我把要写入的数据建立在一个结构里了!!! 可是写完以后读的时候总是后写入的两个读出的是0;如果写入的少的话,比如我写50个字节那么 就有最后1个读出是0;我想问问 ...… 查看全部问答> |
|
用F149驱动继电器结合驱动380V三相电机 利用两极继电器 中间采用光耦驱动第一级继电器 第一级继电器再控制第二级380继电器 上高压电时继电器结合 电机转 然后单片机就死机 求助!!!… 查看全部问答> |
|
这个开发板是去年在淘宝上买的,放那里一直没动,最近想学了,所以拿出来看看,在百度文库里有这个开发板的详细介绍,下面是地址http://wenku.baidu.com/view/0878e189680203d8ce2f249a.html单片机的型号是STC 90C516RD+郭天祥视频教程里面的程序下 ...… 查看全部问答> |




