当前位置:首页 > 单片机 > 单片机
[导读] 以下是一个0到99度的测温程序,只要把数据处理程序改一下就可以改变测量范围和精度。#INCLUDE CBLOCK 20HINPUT_HIGH_8 ;high 8 bit,don't allow other P use it but temperature conversion pINPUT

以下是一个0到99度的测温程序,只要把数据处理程序改一下就可以改变测量范围和精度。


#INCLUDE 16F877A.INC>

CBLOCK 20H

INPUT_HIGH_8 ;high 8 bit,don't allow other P use it but temperature conversion p

INPUT_LOW_8 ;low 8 bit,don't allow other P use it but temperature conversion p














DELAY_TEMP0

DELAY_TEMP1

PASS_TEMP

UNITS_ORDER

TENS_DIGIT

COUNT_16

ENDC

ORG 00H

NOP

GOTO INITIAL

ORG 05H

TABLE

ADDWF PCL,1

DT 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,90H,90H,90H ;comment anode

DISPLAY

MOVFW UNITS_ORDER

CALL TABLE

MOVWF PORTC

BCF PORTA,0 ;trigger transistor of NPN than display units_order

CALL DELAY_1MS

BSF PORTA,0 ;close

MOVFW TENS_DIGIT

CALL TABLE

MOVWF PORTC

BCF PORTA,1 ;trigger transistor of NPN than display tens_digit

CALL DELAY_1MS

BSF PORTA,1

RETURN

DELAY_1MS

MOVLW 12H

MOVWF DELAY_TEMP0

MOVLW 12H

MOVWF DELAY_TEMP1

DECFSZ DELAY_TEMP1

GOTO $-1

DECFSZ DELAY_TEMP0

GOTO $-5

RETURN

INITIAL

BANKSEL TRISA

MOVLW 00H

MOVWF TRISA ;porta0..1 to launch LED, porta2 18b20 communICation port

MOVLW B'00000110' ;set porta as digital port

MOVWF ADCON1

MOVLW 00H

MOVWF TRISC ;8 bits led data bus

MOVLW 0FFH ;portb1 as a command key

MOVWF TRISB

MOVLW 00H

MOVWF OPTION_REG ;portb as week pull up

BANKSEL PORTA

CLRF UNITS_ORDER

CLRF TENS_DIGIT

MAIN

CALL DISPLAY ;press key to start the function

BTFSC PORTB,2

GOTO $-2

BTFSS PORTB,2 ;key release?

GOTO $-1

CALL INITIAL_18B20

BTFSS DELAY_TEMP1,1

GOTO MAIN

MOVLW 0CCH ;skip the rom

MOVWF PASS_TEMP

CALL WRITE_18B20

MOVLW 44H ;release the command of conversion

MOVWF PASS_TEMP

CALL WRITE_18B20

MOVLW D'30'

MOVWF COUNT_16

MOVLW D'90' ;delay 900ms for conversion

MOVWF DELAY_TEMP1

MOVLW D'110'

MOVWF DELAY_TEMP0

DECFSZ DELAY_TEMP0

GOTO $-1

DECFSZ DELAY_TEMP1

GOTO $-5

DECFSZ COUNT_16

GOTO $-9

CALL INITIAL_18B20

BTFSS DELAY_TEMP1,1

GOTO MAIN

MOVLW 0CCH

MOVWF PASS_TEMP

CALL WRITE_18B20 ;release the command of reading

MOVLW 0BEH

MOVWF PASS_TEMP

CALL WRITE_18B20

CALL READ_18B20

CALL INITIAL_18B20 ;end the other data to transmit

BTFSS DELAY_TEMP1,1

GOTO MAIN

CALL BCD_CONVERSION

GOTO MAIN

INITIAL_18B20

BCF PORTB,2

BANKSEL TRISA

BCF TRISA,2

BANKSEL PORTA

MOVLW 0BH

MOVWF DELAY_TEMP0

MOVLW 22H

MOVWF COUNT_16

DECFSZ COUNT_16,1

GOTO $-1 ;delay 586us

DECFSZ DELAY_TEMP0,1

GOTO $-5

BANKSEL TRISA

BSF TRISA,2 ;release the bus

BANKSEL PORTA

MOVFW PORTA

MOVLW D'25' ;delay 76us

MOVWF DELAY_TEMP0

DECFSZ DELAY_TEMP0,1

GOTO $-1

BTFSS PORTA,2

GOTO $+3

BCF DELAY_TEMP1,1 ;not respondence

GOTO $+2

BSF DELAY_TEMP1,1

MOVLW D'160' ;delay 480us

MOVWF DELAY_TEMP0

DECFSZ DELAY_TEMP0,1

GOTO $-1

BSF DELAY_TEMP1,1 ;the slave device responded and set the bit of flag

RETURN

WRITE_18B20

MOVLW 08H

MOVWF DELAY_TEMP0

BCF STATUS,C

WR_LOOP1

BCF PORTA,2

BANKSEL TRISA

BCF TRISA,2

BANKSEL PORTA

NOP

NOP

RRF PASS_TEMP,1

BTFSS STATUS,C

GOTO WR_ZERO

BANKSEL TRISA

BSF TRISA,2

BANKSEL PORTA

WR_ZERO

MOVLW D'25' ;delay 75us

MOVWF DELAY_TEMP1

DECFSZ DELAY_TEMP1

GOTO $-1

BANKSEL TRISA

BSF TRISA,2

BANKSEL PORTA

NOP

NOP

DECFSZ DELAY_TEMP0,1

GOTO WR_LOOP1

RETURN

READ_18B20

MOVLW D'16'

MOVWF DELAY_TEMP0

READ_LOOP2

BCF PORTA,2

BANKSEL TRISA

BCF TRISA,2

BANKSEL PORTA

NOP

NOP

NOP

NOP

NOP

BANKSEL TRISA

BSF TRISA,2

BANKSEL PORTA

NOP

NOP

NOP

NOP

BTFSS PORTA,2

GOTO $+3

BSF STATUS,C

GOTO $+2

BCF STATUS,C

RRF INPUT_HIGH_8,1

RRF INPUT_LOW_8,1

MOVLW D'20' ;delay 60us

MOVWF DELAY_TEMP1

DECFSZ DELAY_TEMP1,1

GOTO $-1

DECFSZ DELAY_TEMP0,1

GOTO READ_LOOP2

RETURN

BCD_CONVERSION

MOVLW 08H

MOVWF COUNT_16

MOVLW 0FH

ANDWF INPUT_HIGH_8,1

SWAPF INPUT_HIGH_8,1

MOVLW 0F0H

ANDWF INPUT_LOW_8,1

SWAPF INPUT_LOW_8,1

MOVFW INPUT_LOW_8

ADDWF INPUT_HIGH_8,1 ;save 8bits data in input_high_8

CLRF INPUT_LOW_8

BCF STATUS,C

LOOP_8TIMES

RLF INPUT_HIGH_8,1

RLF INPUT_LOW_8,1

DECFSZ COUNT_16

GOTO $+2

GOTO SEPARATE_2RS

MOVLW INPUT_LOW_8

MOVWF FSR

CALL ADJ_BCD

GOTO LOOP_8TIMES

ADJ_BCD

MOVLW 03H

ADDWF INDF,W

MOVWF TENS_DIGIT

BTFSC TENS_DIGIT,3

MOVWF INDF ;if the low four bits plus 3 is more than 7,

MOVLW 30H ;add 3,if less than 7,do not change it

ADDWF INDF,W ;if the high four bits plus 3 is more than 7,than

MOVWF TENS_DIGIT

BTFSC TENS_DIGIT,7 ;add 3,if less than 7,do not change it

MOVWF INDF

RETURN

SEPARATE_2RS

MOVFW INPUT_LOW_8

MOVWF UNITS_ORDER

MOVWF TENS_DIGIT

MOVLW 0FH

ANDWF UNITS_ORDER,1

MOVLW 0F0H

ANDWF TENS_DIGIT,1

SWAPF TENS_DIGIT,1

RETURN

END


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。

关键字: 单片机 仿真器 程序

步进电动机是将电脉冲激励信号转换成相应的角位移或线位移的离散值控制电动机,这种电动机每当输入一个电脉冲就动一步,所以又称脉冲电动机。

关键字: 步进电机 正反转 程序

KeilμVision4是Keil软件公司为8051系列微控制器及其兼容产品设计的集成式软件开发环境。μVision4集成了C51编译器和A51汇编器,其界面类似于Microsoft VS,支持C语言和汇编语言程序的编写...

关键字: 程序 编译 链接

双方各执一词,谁也不退让,吴雄昂的身份成为薛定谔的猫:在Arm公司眼中,他已经被罢免一切职位;在安谋中国声明里,吴仍然一切照常。这种叠加态或许还会持续一段时间,但叠加态应该很快就会塌缩成一个确定结果。同样,安谋中国董事会...

关键字: ARM 中国董事会 程序

除了指令空间,自定义指令对应的程序出入口也有严格限制。自定义指令在使用过程中出现任何错误时,Arm的工具链都能及时对其进行识别、提取,并且进行相应的控制。目前也已经有第三方编译器,可以识别自定义指令集可能会出现的错误。专...

关键字: 指令空间 程序 ARM

如果说一众美国科技公司遵循特朗普命令断供华为,还算某种程度上维护所谓程序正义不得已而为之;那么各路本应对政治保持中立的国际技术标准组织,先后宣布剔除华为成员资格,绝对算助纣为虐;而联邦快递将华为委托寄送目的地为中国的快递...

关键字: 快递 华为 程序

(全球TMT2022年11月7日讯)2022北京马拉松于11月6日开跑。本次北马采用集"数字化注册"、"人脸识别核验"、"AI测温"以及"北京健康宝健康码状态、全程新冠疫苗接种和24小时内核酸检测阴性证明"多验合一的物...

关键字: 物联网 人工智能 测温 人脸识别技术

纤毫毕现,引领全球红外行业发展潮流的永远都是技术创新。 武汉2022年11月5日 /美通社/ -- 近日,武汉高德智感科技有限公司重磅推出PT系列红外热像仪新品。内核搭载1280x1024非制冷氧化钒红外探测器,成为行...

关键字: 热像仪 测温 红外热像仪 ADVANCED

在软件开发过程中,我们希望软件可以运行无误。但是常常事与愿违,程序经常跑飞,或者卡死。原因有很多,有可能是因为软件系统设计的原因,或者外部传感器的失效,再或者是程序的Bug等。为了防止程序在出现问题之后,可以顺利复位和重...

关键字: 软件 程序 传感器

进程是程序的执行过程。程序是静态的,是存在于外存之中的,电脑关机后依然存在。进程是动态的,是存在于内存之中的,是程序的执行过程,电脑关机后就不存在进程了。进程的内容来源于程序,进程的启动过程就是把程序从外存加载到内存的过...

关键字: 程序 静态 操作系统
关闭
关闭