亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p16demo.asm

?? PIC單片機與LCD1602的匯編程序。可以直接使用。里面PIC16和PIC18兩種
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
	sublw	0x40
	btfss	STATUS,Z		;is temp ready ??
	goto	get_temp		;NO, try again
	movlw	0x00			;YES, send temp command
	banksel	cmd_byte		;send temp register command
	movwf	cmd_byte
	goto	temp_now

convert_temp
	movwf	temperature
	call	bin_bcd			;NO, get temp ready for LCD
	call	LCDLine_1
	
	movlw	A'T'			;send "Temp=" to LCD
	movwf	temp_wr	
	call	d_write
	movlw	A'e'
	movwf	temp_wr	
	call	d_write
	movlw	A'm'
	movwf	temp_wr	
	call	d_write
	movlw	A'p'
	movwf	temp_wr	
	call	d_write
	movlw	0x20			;space
	movwf	temp_wr	
	call	d_write
	movlw	A'='
	movwf	temp_wr	
	call	d_write

	movlw	0x20			;space
	movwf	temp_wr	
	call	d_write

	movf	MSD,w			;send high digit
	movwf	temp_wr
	call	d_write
	movf	MsD,w			;send middle digit
	movwf	temp_wr
	call	d_write
	movf	LSD,w			;send low digit
	movwf	temp_wr
	call	d_write
	movlw	A'C'			;send "C" for Celsius
	movwf	temp_wr	
	call	d_write

	movlw	0x20			;space
	movwf	temp_wr	
	call	d_write
	movlw	0x20			;space
	movwf	temp_wr	
	call	d_write
	movlw	0x20			;space
	movwf	temp_wr	
	call	d_write
	
	call	LCDLine_2		;send "RB0 = Exit" to LCD
	banksel	ptr_pos			
	movlw	.144
	movwf	ptr_pos
	call	stan_char_2
	
	btfss	select			;wait for RB0 release
	goto	$-1
	call	delay_100ms
	btfss	select			;exit ?
	goto	menu_clock		;YES, goto main menu
	btfsc	PIR1, TMR1IF		;2 second overflow occur ??
	call	write_eeprom		;YES
	goto	get_temp		;NO, get temperature again

	
;----------------- CLOCK ------------------------------------------

clock
	btfss	select			;wait for RB0 button release
	goto	$-1
	banksel	T1CON
	movlw	0x0F			;intitialize TIMER1
	movwf	T1CON
	clrf	seconds
	clrf	minutes
	clrf	hours
overflow	
	bcf	PIR1,TMR1IF
	movlw	0x80		
	movwf	TMR1H			;load regs for 1 sec overflow
	clrf	TMR1L

	incf	seconds,f		;increment seconds
	movf	seconds,w
	sublw	.60
	btfss	STATUS,Z		;increment minutes ?
	goto	clk_done
	incf	minutes,f		
	clrf	seconds

	movf	minutes,w
	sublw	.60
	btfss	STATUS,Z		;increment hours ?
	goto	clk_done	
	incf	hours,f			
	clrf	minutes

	movf	hours,w
	sublw	.13
	btfss	STATUS,Z
	goto	clk_done
	movlw	.1			;start a new 12 hour period
	movwf	hours
clk_done
	movf	hours,w			;send hours to LCD
	call	bin_bcd

	call	LCDLine_1		;place time on line 1

	movf	MsD,w			;send middle digit
	movwf	temp_wr
	call	d_write
	movf	LSD,w			;send low digit
	movwf	temp_wr
	call	d_write	
	movlw	0x3A			;send  :   colon
	movwf	temp_wr
	call	d_write

	movf	minutes,w		;send minutes to LCD
	call	bin_bcd

	movf	MsD,w			;send middle digit
	movwf	temp_wr
	call	d_write
	movf	LSD,w			;send low digit
	movwf	temp_wr
	call	d_write	
	movlw	0x3A			; send :   colon
	movwf	temp_wr
	call	d_write

	movf	seconds,w		;send seconds to LCD
	call	bin_bcd

	movf	MsD,w			;send middle digit
	movwf	temp_wr
	call	d_write
	movf	LSD,w			;send low digit
	movwf	temp_wr
	call	d_write

	movlw	0x20			;send 3 spaces after 00:00:00
	movwf	temp_wr
	call	d_write
	movlw	0x20
	movwf	temp_wr
	call	d_write
	movlw	0x20
	movwf	temp_wr
	call	d_write
	
	banksel	ptr_pos			;send "RA4=Dn RB0=Menu" to LCD
	movlw	.112
	movwf	ptr_pos
	call	stan_char_2

	banksel	PORTA			
	btfss	scroll			;set time ??
	goto	set_time

	btfss	select			;return to main menu ??
	goto	menu
	
	btfss	PIR1,TMR1IF		;has timer1 overflowed ?	
	goto	$-1			;NO, wait til overflow
	goto	overflow		;YES

	return
;*******************************************************************
							

;************************** ROUTINES ******************************
;******************************************************************
;******************************************************************
		
;----Standard code, Place characters on line-1--------------------------
stan_char_1
	call	LCDLine_1		;mvoe cursor to line 1 
	banksel	ptr_count
	movlw	.16			;1-full line of LCD
	movwf	ptr_count
stan_next_char_1
	movlw	HIGH stan_table
	movwf	PCLATH
	movf	ptr_pos,w		;character table location
	call	stan_table		;retrieve 1 character
	movwf	temp_wr			
	call	d_write			;send character to LCD

	banksel	ptr_pos			;get next character for LCD
	incf	ptr_pos,f
	decfsz	ptr_count,f		;move pointer to next char
	goto	stan_next_char_1

	banksel	TXREG			;move data into TXREG 
	movlw	"\n"			;next line
	movwf	TXREG
	banksel	TXSTA
	btfss	TXSTA,TRMT		;wait for data TX
	goto	$-1
	banksel	TXREG			;move data into TXREG 
	movlw	"\r"			;carriage return
	movwf	TXREG
	banksel	TXSTA
	btfss	TXSTA,TRMT		;wait for data TX
	goto	$-1	
	banksel	PORTA			;bank 0
	
	return

;----Standard code, Place characters on line-2--------------------------
stan_char_2	
	call	LCDLine_2		;move cursor to line 2 
	banksel	ptr_count
	movlw	.16			;1-full line of LCD
	movwf	ptr_count
stan_next_char_2
	movlw	HIGH stan_table
	movwf	PCLATH
	movf	ptr_pos,w		;character table location
	call	stan_table		;retrieve 1 character
	movwf	temp_wr			
	call	d_write			;send character to LCD

	banksel	ptr_pos			;get next character for lCD
	incf	ptr_pos,f
	decfsz	ptr_count,f		;move pointer to next char
	goto	stan_next_char_2

	banksel	TXREG			;move data into TXREG 
	movlw	"\n"			;next line
	movwf	TXREG
	banksel	TXSTA
	btfss	TXSTA,TRMT		;wait for data TX
	goto	$-1
	banksel	TXREG			;move data into TXREG 
	movlw	"\r"			;carriage return
	movwf	TXREG
	banksel	TXSTA
	btfss	TXSTA,TRMT		;wait for data TX
	goto	$-1
	banksel	PORTA			;bank 0	

	return
;----------------------------------------------------------------------


;------------------ 100ms Delay --------------------------------
delay_100ms
	banksel	temp_1
	movlw	0xFF
	movwf	temp_1
	movlw	0x83
	movwf	temp_2

	decfsz	temp_1,f
	goto	$-1
	decfsz	temp_2,f
	goto	$-3
	return

;---------------- 1s Delay -----------------------------------
delay_1s
	banksel	temp_1
	movlw	0xFF
	movwf	temp_1
	movwf	temp_2
	movlw	0x05

	movwf	temp_3
	decfsz	temp_1,f
	goto	$-1
	decfsz	temp_2,f
	goto	$-3
	decfsz	temp_3,f
	goto	$-5
	return	

;---------------- Set Current Time ----------------------------
set_time
	banksel	ptr_pos			;send "RA4= --> RBO= ++" to LCD
	movlw	.128
	movwf	ptr_pos
	call	stan_char_2
set_time_again
	btfss	scroll			;wait for RA4 button release
	goto	$-1

	call	LCDLine_1		;start at 0x00 on LCD

	btfss	select			;wait for RB0 button release
	goto	$-1
	call	delay_100ms			
	btfss  	select			;increment hours (tens) ?
	goto	inc_hours
	goto	next_digit
inc_hours	
	incf	hours
	movf	hours,w			;check if hours has passed 12 ?
	sublw	.13
	btfss	STATUS,Z
	goto	$+2
	clrf	hours			;YES, reset hours to 00
next_digit
	btfss	scroll			;move to next digit
	goto	inc_mins
	movf	hours,w		

	call	bin_bcd			;get hours ready for display
	
	movf	MsD,w			;send tens digit
	movwf	temp_wr
	call	d_write
	movf	LSD,w			;send ones digit
	movwf	temp_wr
	call	d_write	
	movlw	0x3A			;send   :   colon
	movwf	temp_wr
	call	d_write

	goto	set_time_again
	
inc_mins
	btfss	scroll			;wait for RA4 button release
	goto	$-1
	call	LCDLine_1
	movlw	0x14			;shift cursor to right 3 places
	movwf	temp_wr
	call	i_write
	movlw	0x14
	movwf	temp_wr
	call	i_write
	movlw	0x14
	movwf	temp_wr
	call	i_write
	
	btfss	select			;wait for RB0 button release
	goto	$-1
	call	delay_100ms
	btfss  	select			;increment minutes (tens) ?
	goto	inc_minutes
	goto	next_digit?
inc_minutes	
	incf	minutes
	movf	minutes,w		;check if hours has passed 12 ?
	sublw	.60
	btfss	STATUS,Z
	goto	$+2
	clrf	minutes
next_digit?
	btfss	scroll			;move to next digit
	goto	set_time_done
	movf	minutes,w
		
	call	bin_bcd			;get minutes ready for display
	
	movf	MsD,w			;send tens digit
	movwf	temp_wr
	call	d_write
	movf	LSD,w			;send ones digit
	movwf	temp_wr
	call	d_write	
	movlw	0x3A			;send  :   colon
	movwf	temp_wr
	call	d_write	
	goto	inc_mins

set_time_done
	btfss	scroll			;wait for RA4 button release
	goto	$-1
	goto	overflow
	
;---------------- Binary (8-bit) to BCD -----------------------
;		255 = highest possible result
bin_bcd
	banksel	MSD
	clrf	MSD
	clrf	MsD
	movwf	LSD		;move value to LSD
ghundreth	
	movlw	.100		;subtract 100 from LSD
	subwf	LSD,w
	btfss	STATUS,C	;is value greater then 100
	goto	gtenth		;NO goto tenths
	movwf	LSD		;YES, move subtraction result into LSD
	incf	MSD,f		;increment hundreths
	goto	ghundreth	
gtenth
	movlw	.10		;take care of tenths
	subwf	LSD,w
	btfss	STATUS,C
	goto	over		;finished conversion
	movwf	LSD
	incf	MsD,f		;increment tenths position
	goto	gtenth
over				;0 - 9, high nibble = 3 for LCD
	movf	MSD,w		;get BCD values ready for LCD display
	xorlw	0x30		;convert to LCD digit
	movwf	MSD
	movf	MsD,w
	xorlw	0x30		;convert to LCD digit
	movwf	MsD
	movf	LSD,w
	xorlw	0x30		;convert to LCD digit
	movwf	LSD
	retlw	0

;---------------- Binary (16-bit) to BCD -----------------------
;		xxx = highest possible result
bin16_bcd			; Takes number in NumH:NumL 
	                       	; Returns decimal in TenK:Thou:Hund:Tens:Ones 
        swapf   NumH,w 
        andlw   0x0F             
        addlw   0xF0             
        movwf   Thou 
        addwf   Thou,f 
        addlw   0xE2 
        movwf   Hund 
        addlw   0x32 
        movwf   Ones 

        movf    NumH,w 
        andlw   0x0F 
        addwf   Hund,f 
        addwf   Hund,f 
        addwf   Ones,f 
        addlw   0xE9 
        movwf   Tens 
        addwf   Tens,f 
        addwf   Tens,f 

        swapf   NumL,w 
        andlw   0x0F 
        addwf   Tens,f 
        addwf   Ones,f 

        rlf     Tens,f 
        rlf     Ones,f 
        comf    Ones,f 
        rlf     Ones,f 

        movf    NumL,w 
        andlw   0x0F 
        addwf   Ones,f 
        rlf     Thou,f 

        movlw   0x07 
        movwf   TenK 

        movlw   0x0A                             ; Ten 
Lb1: 
        addwf   Ones,f 
        decf    Tens,f 
        btfss   3,0 
         goto   Lb1 
Lb2: 
        addwf   Tens,f 
        decf    Hund,f 
        btfss   3,0 
         goto   Lb2 
Lb3: 
        addwf   Hund,f 
        decf    Thou,f 
        btfss   3,0 
         goto   Lb3 
Lb4: 
        addwf   Thou,f 
        decf    TenK,f 
        btfss   3,0 
         goto   Lb4 

        retlw   0

;---------------------------- EEPROM WRITE -------------------------------
write_eeprom	
	banksel	SSPCON2			;write to EEPROM
	bsf	SSPCON2,SEN		;start bit
	btfsc	SSPCON2,SEN
	goto	$-1	
	movlw	B'10100000'		;send control byte (write)
	banksel	SSPBUF	
	movwf	SSPBUF
	call	ssprw
	banksel	SSPCON2
	btfsc	SSPCON2,ACKSTAT		;ack?
	goto	$-1

	movlw	0x00			;send slave address HIGH byte
	banksel	SSPBUF
	movwf	SSPBUF
	call	ssprw
	banksel	SSPCON2
	btfsc	SSPCON2,ACKSTAT		;ack?
	goto	$-1

	movlw	0x05			;send slave address LOW byte(0x0005)
	banksel	SSPBUF
	movwf	SSPBUF
	call	ssprw
	banksel	SSPCON2
	btfsc	SSPCON2,ACKSTAT		;ack?
	goto	$-1

	banksel	temperature
	movf	temperature,w		;send slave DATA = temperature
	movwf	SSPBUF
	call	ssprw
	banksel	SSPCON2
	btfsc	SSPCON2,ACKSTAT		;ack?
	goto	$-1

	bsf	SSPCON2,PEN		;stop bit
	btfsc	SSPCON2,PEN
	goto	$-1
		
	banksel	TMR1L
	bcf	PIR1,TMR1IF		;clear TIMER1 overflow flag
	clrf	TMR1L			;clear registers for next overflow
	clrf	TMR1H

	return
;------------------------ IDLE MODULE -------------------------------------
ssprw					;check for idle SSP module 
	movlw	0x00
	banksel	SSPCON2
	andwf	SSPCON2,w
	sublw	0x00
	btfss	STATUS,Z
	goto	$-4

	btfsc	SSPSTAT,R_W
	goto	$-1
	return

;---------------------------------------------------------------------------
	end	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久免费相片| 国产成人综合网站| 欧美老女人在线| 天天射综合影视| 91.com视频| 久久99国产精品久久99果冻传媒| 久久精品欧美一区二区三区麻豆| 国产精品亚洲第一区在线暖暖韩国 | 久久日一线二线三线suv| 国产曰批免费观看久久久| 久久人人爽爽爽人久久久| 成人毛片在线观看| 亚洲欧美日韩在线| 欧美午夜精品电影| 精品一区二区三区免费| 欧美国产综合色视频| 色呦呦国产精品| 日韩中文字幕区一区有砖一区 | 亚洲三级在线看| 欧美性猛交一区二区三区精品| 日日夜夜一区二区| 精品国产乱码久久久久久闺蜜| 粉嫩一区二区三区在线看| 亚洲激情五月婷婷| 日韩欧美亚洲另类制服综合在线| 成人一级黄色片| 免费在线观看视频一区| 中文字幕高清不卡| 欧美久久久久免费| www.日韩在线| 久久国产精品99精品国产| 综合久久国产九一剧情麻豆| 日韩免费福利电影在线观看| 成人动漫在线一区| 日韩av网站在线观看| 成人免费一区二区三区视频 | 日本韩国一区二区三区视频| 久草在线在线精品观看| 亚洲一区二区av在线| 久久久精品国产免费观看同学| 欧美日韩国产综合视频在线观看| 国产成人日日夜夜| 免费人成黄页网站在线一区二区 | 久久综合五月天婷婷伊人| 色综合久久99| 国产成人一级电影| 水野朝阳av一区二区三区| 欧美激情一区二区三区蜜桃视频| 欧美一区二区三区不卡| 欧美性生活影院| 91麻豆免费看片| 国产精品一线二线三线| 日本不卡中文字幕| 一区二区三区免费观看| 亚洲欧美中日韩| 欧美国产激情一区二区三区蜜月| 91精品国产一区二区三区香蕉 | 在线电影国产精品| 色综合网站在线| 成人一级视频在线观看| 国产一区亚洲一区| 精品一区二区三区视频在线观看 | 国产精品久久久久天堂| 精品国产免费视频| 欧美一区二区三区精品| 在线播放一区二区三区| 欧美日韩中文精品| 欧美伊人久久久久久午夜久久久久| 成人免费高清在线| 国产成人午夜高潮毛片| 国产不卡视频在线观看| 国产精品正在播放| 高清不卡在线观看av| 国产精品一区二区男女羞羞无遮挡 | 色婷婷亚洲精品| 99久久精品一区| 97久久超碰国产精品| 91在线视频播放| 91香蕉视频mp4| 在线观看欧美黄色| 欧美精选午夜久久久乱码6080| 欧美日韩一区视频| 在线不卡一区二区| 日韩免费看的电影| 精品国产免费人成在线观看| 26uuu久久综合| 久久精品网站免费观看| 欧美国产亚洲另类动漫| 中文字幕一区二区三区视频| 亚洲美女在线一区| 午夜久久久久久| 蜜桃视频一区二区| 国产成人午夜精品5599| 9i在线看片成人免费| 一本高清dvd不卡在线观看| 91精品办公室少妇高潮对白| 欧美电影一区二区三区| 欧美精品一区二区三区久久久| 久久精品一区蜜桃臀影院| **欧美大码日韩| 亚洲午夜一区二区三区| 精品亚洲国内自在自线福利| 国产成人啪免费观看软件| 色综合久久88色综合天天6| 在线观看91精品国产麻豆| 久久亚洲一区二区三区四区| 成人免费小视频| 三级欧美韩日大片在线看| 极品少妇xxxx精品少妇偷拍| av午夜精品一区二区三区| 欧洲一区二区av| 久久亚洲精华国产精华液| 亚洲人吸女人奶水| 奇米一区二区三区| 成人app网站| 91精品国产综合久久福利软件| 国产欧美日韩精品在线| 亚洲综合精品久久| 国产一区二区看久久| 在线欧美一区二区| 久久亚洲免费视频| 午夜精品福利久久久| 国产成人在线观看| 欧美一级一级性生活免费录像| 国产亚洲欧美在线| 视频在线观看国产精品| 国产精品一二三四区| 欧美日韩久久久一区| 国产精品成人一区二区三区夜夜夜 | 开心九九激情九九欧美日韩精美视频电影| 国产精品 日产精品 欧美精品| 欧美日韩精品系列| 中文字幕中文字幕在线一区 | 天天做天天摸天天爽国产一区| 粉嫩av亚洲一区二区图片| 3751色影院一区二区三区| 曰韩精品一区二区| av电影天堂一区二区在线| 欧美一区二区三区思思人| 亚洲一区二区欧美激情| 92精品国产成人观看免费| 亚洲精品一区二区三区四区高清| 香蕉加勒比综合久久| 色婷婷综合久色| 中文字幕一区二区三区在线不卡| 国内成人免费视频| 欧美一级生活片| 日韩精品成人一区二区在线| 日本高清视频一区二区| 亚洲日本乱码在线观看| 成人一区二区三区| 国产午夜精品一区二区三区视频 | 欧洲视频一区二区| 亚洲另类在线制服丝袜| 97久久久精品综合88久久| 国产欧美综合在线观看第十页| 精品一二三四区| 欧美精品一区二区三区蜜臀| 久久精品国产第一区二区三区| 6080午夜不卡| 免费在线观看精品| 欧美一二三四区在线| 日韩av电影免费观看高清完整版 | 久久精品视频在线免费观看| 国内欧美视频一区二区| 欧美成va人片在线观看| 久久99精品一区二区三区三区| 欧美一级日韩不卡播放免费| 人人爽香蕉精品| 欧美一区二区美女| 日本美女一区二区三区视频| 日韩欧美国产成人一区二区| 美女视频黄 久久| 日韩精品一区在线| 精品一二三四在线| 国产欧美精品区一区二区三区 | 91首页免费视频| 亚洲精品视频在线| 欧美日韩精品二区第二页| 日韩电影在线观看电影| 日韩欧美一区在线观看| 国产做a爰片久久毛片| 欧美国产综合一区二区| 99久久综合色| 亚洲国产精品久久艾草纯爱| 日韩午夜在线观看| 国产精品一二三在| 中文字幕日本不卡| 欧美群妇大交群的观看方式 | 国产mv日韩mv欧美| 亚洲欧美日韩在线播放| 制服视频三区第一页精品| 久久99国产乱子伦精品免费| 国产精品美女www爽爽爽| 色欧美片视频在线观看在线视频| 亚洲综合久久av| 久久亚洲综合色一区二区三区| 97久久人人超碰| 全国精品久久少妇| 国产精品精品国产色婷婷|