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

📄 iop.asm

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 ASM
📖 第 1 页 / 共 5 页
字号:
            jsr      Vfdreadkeydata
            rts
Vfdswsendinok:
            lda      rVfdcmdcount
            bne      Vfdsendledok
            inc      rVfdcmdcount
            lda      rVfdswdata          ;;16312 write led port
            ror      rVfdswdata
            bra      Vfdsendled
Vfdsendledok:
            jsr      Vfdsetstbhigh
            inc      rVfdcmdcount
            lda      #43H                ;;16312 write led command
            bra      Vfdsendled
Vfdswreadinok:
            ldx      rVfdswindex
            lda      rVfdtempdata
            sta      rVfdswbuf,x

.ifnz  SUPPORT_VFD_ROLL
            eor      #%00000011
            and      #%00000011
.else
            eor      rVfdswbuf
.endif
            ldx      rVfdswindex
            beq      Vfdswnokey
            sta      rVfdswbuf,x
Vfdswnokey:
            inc      rVfdswindex
            lda      rVfdloopcount
            beq      Vfdswfinish
            dec      rVfdloopcount
            dec      rVfdstate
            jsr      Vfdsetstbhigh
            bra      Vfdswreturn0

.endif

Vfdswfinish:
            inc      rVfdreptime           ;;inc repeat count
            .ifnz     SUPPORT_VFD_SWITCH
            jsr      Vfdswgetdata
            .endif
            bbs      7,rVfdkeydata,Vfdswnorep
            stz      rVfdreptime
            stz      rVfddataold
Vfdswnorep:
            inc      rVfdstate
            stz      rVfdstatus
            stz      rVfdswindex
Vfdswreturn0:
            stz      rVfdcmdcount
Vfdswreturn:

            rts


;;**************************************************************************;;
;; VFD get sw code                                                          ;;
;;**************************************************************************;;
Vfdswgetdata:
.ifnz SUPPORT_VFD_ROLL
            lda      rVfdswbuf+1
            and      #%00000011
            sta      rVfdswbuf+1
            cmp      rVfdswbuf+2
            beq      Vfdswexit
            lda      rVfdswbuf+1
            sta      rVfdswbuf+2
            beq      Vfdswexit
            clc
            adc      #24
            ora      #%10000000
            sta      rVfdkeydata
            jsr      Vfdgetcode
Vfdswexit:
            rts

.else
.ifnz     SUPPORT_VFD_SWITCH
            ldy      #16
Vfdswloop0:
            ldx      #4
Vfdswloop1:
            lsr      rVfdswbuf,x
            bcs      Vfdhaveswdata
            dey
            beq      Vfdswexit  
            dex
            bne      Vfdswloop1
            bra      Vfdswloop0
Vfdhaveswdata:
            tya
            adc      #23
            ora      #%10000000
            sta      rVfdkeydata
            jsr      Vfdgetcode
Vfdswexit:
            rts
.endif
.endif
.endif


.ifnz  SUPPORT_LCD
;;**************************************************************************;;
;; Lcd send data  service   llcc                                            ;;
;;**************************************************************************;;
Lcdwservice:
             sec
             jsr     Lcdsendbyte
             bne     Lcdwreturn
             lda     rLcdscantime
             bne     Lcdsednext 
             smb     0,rLcdstate
             stz     rLcdloopcount
             ;lda     #70
             lda     #150
             sta     rLcdscantime
             lda     #8
             sta     rLcdgamecount
Lcdsednext:
             bbr     0,rLcdstate,Lcdwreturn
             lda     rLcdloopcount
             cmp     VFD_COUNT_BASE 
             bcc     Lcdclearstb
             jsr     Lcdsetstbhigh
             stz     rLcdstate
             rts
Lcdclearstb:
             lda rLcdloopcount
             tax
             cmp     #10
             beq     Lcdisdata
             bcs     Lcdclearstb1
             lda     #0fH
             sta     rLcdtemp
             lda     #24
             bra     Lcdiscommand
Lcdisdata:
             lda     #01H
             sta     rLcdtemp
             lda     #18
Lcdiscommand:
             sta     rLcdsendcount
             jsr     Lcdsetstbhigh
             lda rLcdloopcount
             tax
             lda     VFD_BUFFER_BASE,x                         
             sta     rLcddata
             inc rLcdloopcount
             lda rLcdloopcount
             tax
             lda     VFD_BUFFER_BASE,x             
             sta     rLcddata+1
             inc rLcdloopcount
             sec
             jsr     Lcdsetcount
             rts
Lcdclearstb1:
             stz     rLcdtemp
             lda rLcdloopcount
             tax
             lda     VFD_BUFFER_BASE,x
             sta     rLcddata
             inc rLcdloopcount
             lda     #16
             sta     rLcdsendcount
             sec
             jsr     Lcdsetcount
Lcdwreturn:
             rts

;;**************************************************************************;;
;; Set STB for LCD command or data                                          ;;
;; if c=1 then    VFD_STB = low ,else c=0 VFD_STB = high                    ;;
;;**************************************************************************;;
Lcdsetcount:
             jsr     Flashinout
             bcs     Lcdsetstbok
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             rmb     VFDB_STB,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif
             ;smb     VFDB_STB,VFD_PORT
             rts
Lcdsetstbok:
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             smb     VFDB_STB,Vfd_init1
             lda     Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif
             rmb     VFDB_STB,VFD_PORT
             rts

;;**************************************************************************;;
;; Set LCD STB high and VFD DATA input                                      ;;
;;**************************************************************************;;
Lcdsetstbhigh:
             .ifnz SUPPORT_DEMO
             ;.ifnz 0
             rmb     VFDB_STB,Vfd_init1
            lda      Vfd_init1
             sta     VFD_PORT_CFG          ;;set VFD_CLK output
             .endif
            rts
.endif

.ifnz SUPPORT_SPL10
do_spl10_service:
			bbs 0,spl10_service_status,spl10_read
			jsr do_spl10_wr
			bcc service_wr_not_ok
			smb 0,spl10_service_status
service_wr_not_ok:			
			bra service_exit
spl10_read:			
			bbs 1,spl10_service_status,reset_spl10
			jsr do_spl10_rd
			bcc service_rd_not_ok
			smb 1,spl10_service_status
			lda #90
			sta spl10_wr_data
			lda #8
			sta spl10_write_count
service_rd_not_ok:			
			bra service_exit
reset_spl10:
			bbs 2,spl10_service_status,reset_write
			jsr do_spl10_sync
			bcc service_exit
			smb 2,spl10_service_status
			bra service_exit
reset_write:			
			jsr do_write_bytes
			bcc service_exit						
restart_service:
			stz spl10_service_status
service_exit:
			rts

									
do_spl10_wr:
			bbs 0,spl10_wr_status,wr_write_cmd
			jsr do_spl10_sync
            bcc sync_not_ok
            smb 0,spl10_wr_status
            lda #SPL10_WR_CMD
            ora spl10_buf_count
            sta spl10_wr_data
            lda #8
            sta spl10_write_count            
sync_not_ok:            
            bra wr_exit
wr_write_cmd:              
			bbs 1,spl10_wr_status,wr_write_data
			jsr do_write_bytes
			bcc write_cmd_not_ok
			smb 1,spl10_wr_status              			
			ldx spl10_buf_count
			lda SPL10_BUFFER_BASE,x		
			sta spl10_wr_data
			lda #8
			sta spl10_write_count			
			inc spl10_buf_count
			lda spl10_buf_count
			cmp #SPL10_BUFFER_SIZE
			bne count_is_free
			stz spl10_buf_count
count_is_free:			
write_cmd_not_ok:
			bra wr_exit         
wr_write_data:
			bbs 2,spl10_wr_status,write_next                            
			jsr do_write_bytes
			bcc write_data_not_ok
			smb 2,spl10_wr_status
write_data_not_ok:			
			bra wr_exit
write_next:
			stz spl10_wr_status
			sec
			rts
wr_exit:
			clc
			rts			                                                       

do_spl10_rd:
			bbs 0,spl10_rd_status,rd_write_cmd
			jsr do_spl10_sync
			bcc rd_sync_not_ok
            smb 0,spl10_rd_status
            lda #SPL10_RD_CMD
            sta spl10_wr_data
            lda #8
            sta spl10_write_count
rd_sync_not_ok:            
            bra rd_exit
rd_write_cmd:
			bbs 1,spl10_rd_status,rd_read_data
			jsr do_write_bytes
			bcc rd_cmd_not_ok
			smb 1,spl10_rd_status
			lda #8
			sta spl10_read_count
rd_cmd_not_ok:
			bra rd_exit			
rd_read_data:
			bbs 2,spl10_rd_status,restart_read			
			jsr do_read_bytes
			bcc rd_data_no_ok
			smb 2,spl10_rd_status
rd_data_no_ok:
			bra rd_exit
restart_read:
            lda spl10_rd_data            
            ;;cmp rd_old_data
            ;;beq key_is_null
            ;;lda spl10_rd_data
            ;;sta rd_old_data      
            ;;beq key_is_null
            and #!VFD_REPEAT
            ora #VFD_READY  
            sta IOP_DATA5_L			                                                
key_is_null:                        									
			stz spl10_rd_status
			sec		
			rts
rd_exit:
			clc
			rts			
									


do_write_bytes:                            
			bbs 0,write_byte_status,wr_set_stb_low
			rol  spl10_wr_data
			bcs  wr_set_data_high              
			smb  VFDB_DAT,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG
			rmb  VFDB_DAT,VFD_PORT 
			smb 0,write_byte_status              
			bra write_exit              
wr_set_data_high:
			rmb  VFDB_DAT,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG                            
			smb 0,write_byte_status
			bra write_exit
wr_set_stb_low:              
			bbs 1,write_byte_status,wr_wait_ack_low                                         
			smb  VFDB_STB,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG
			rmb  VFDB_STB,VFD_PORT               
			smb  1,write_byte_status
			bra write_exit                            
wr_wait_ack_low:              			
			bbs 2,write_byte_status,wr_wait_ack_high
			bbr VFDB_CLK,VFD_PORT,wr_ack_is_low
			bra write_exit						
wr_ack_is_low:              
			rmb  VFDB_STB,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG                  
			smb 2,write_byte_status
			bra write_exit						
wr_wait_ack_high:            
			bbs VFDB_CLK,VFD_PORT,wr_next_bit			
			bra write_exit
wr_next_bit:
			stz write_byte_status             
			dec spl10_write_count
			beq write_byte_ok
write_exit:
			clc
			rts
write_byte_ok:
			sec
			rts



do_read_bytes:			
			bbs 0,read_byte_status,rd_wait_ack_low
			smb  VFDB_STB,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG
			rmb  VFDB_STB,VFD_PORT 
			smb  0,read_byte_status						
			bra  read_exit
rd_wait_ack_low:              
			bbs 1,read_byte_status,rd_set_stb_high					
			bbr VFDB_CLK,VFD_PORT,rd_ack_is_low
			bra read_exit
rd_ack_is_low:									
			rmb  VFDB_DAT,Vfd_init1
			lda  Vfd_init1
			sta  VFD_PORT_CFG
			bbs VFDB_DAT,VFD_PORT,rd_dat_is_high
			clc
			rol spl10_rd_data
			smb  1,read_byte_status
			bra read_exit
rd_dat_is_high:
			sec
			rol  spl10_rd_data
			smb  1,read_byte_status

⌨️ 快捷键说明

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