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

📄 74as.asm

📁 pic16f74 实现对视频解码芯片lrs5752的配置(汇编)
💻 ASM
字号:
#include <p16f74.inc>
  udata 0x0020
input res 1
ctrlword res 1
count res 1        ;计数用
count1 res 1
count2 res 1
w_temp res 1
status_temp res 1
bufferx2 res 1      ;触摸屏数据接收缓冲
bufferx1 res 1
buffery2 res 1
buffery1 res 1
modeaddress res 1     ;视频解码模块寄存器控制
selectaddress res 1
selectvalue   res 1
shipinaddress res 1
shipinvalue   res 1
tmr0_temp     res 1
irvalue       res 1
datax equ 0x78       ;初始控制解码芯片
controlx equ 0xd0    ;ADS7846控制字
controly equ 0x90
timevalue equ 0x05
#define MODE .32    ;LRS5752控制液晶显示的较好值
#define PICTURE .16
#define COLOR .148
#define TINT .158
#define PHASE .44
#define CONTVIDEO .161
#define CONTRGB1 .0
#define CONTRGB2 .1
#define GAMMA1 .145
#define GAMMA2 .160
#define RGBAMP .89
#define BRIGHT .185
#define SUBBRIGHT_R .139
#define SUBBRIGHT_B .140
#define COM_AMP .132
#define COM_DC .100
#define DACOUT .163
data_tx macro address,value 
   banksel PORTC;写入LRS5752各寄存器的合适值
   bcf PORTC,1
;writeaddress
   movlw address
   movwf input
   movlw 8
   movwf count
   movlw 0xff
   andwf input,1  ;使用GPIO的方法,将RC3作为时钟输入,RC4作为数据输入(并口模拟串口的方法)
   btfsc input,0  ;上升沿触发
   bsf PORTC,4
   bcf PORTC,4
   bcf PORTC,3
   nop
   bsf PORTC,3
   nop
   rrf input,1
   decfsz count,1
   goto $-.11
;writevalue
   movlw value
   movwf input
   movlw 8
   movwf count
   movlw 0xff
   andwf input,1
   btfsc input,0
   bsf PORTC,4
   bcf PORTC,4
   bcf PORTC,3
   nop
   bsf PORTC,3
   nop
   rrf input,1
   decfsz count,1
   goto $-.11
   bsf PORTC,1
   endm

data_select macro   ;按键选择,输入选择寄存器和相应的值
   banksel PORTC
   bcf PORTC,1
;writeaddress
   movf shipinaddress,w
   movwf input
   movlw 8
   movwf count
   movlw 0xff
   andwf input,1  
   btfsc input,0  
   bsf PORTC,4       
   bcf PORTC,4
   bcf PORTC,3
   nop
   bsf PORTC,3
   nop
   rrf input,1
   decfsz count,1
   goto $-.11
;writevalue
   movf shipinvalue,w
   movwf input
   movlw 8
   movwf count
   movlw 0xff
   andwf input,1
   btfsc input,0
   bsf PORTC,4
   bcf PORTC,4
   bcf PORTC,3
   nop
   bsf PORTC,3
   nop
   rrf input,1
   decfsz count,1
   goto $-.11
   bsf PORTC,1
   endm

push macro 
   movwf w_temp
   movf STATUS,w
   movwf status_temp
   endm

pop macro
   movf status_temp,w
   movwf STATUS
   swapf w_temp,f
   swapf w_temp,w
   endm

gettouchvalue macro controlvalue,storeone,storetwo
   movlw controlvalue
   movwf ctrlword
   movlw 8
   movwf count
;LOOP1    ;input controlword
   movlw 0xff
   andwf ctrlword,1   ;同样用GPIO的方法进行ADS7846控制字的写入
   btfsc ctrlword,7   ;得到触摸屏的x值和y值,特别要注意时序问题
   bsf PORTC,4
   bcf PORTC,4
   bcf PORTC,3
   nop
   bsf PORTC,3          ;上升沿触发
   nop
   rlf input,1
   decfsz count,1
   goto $-.11
   clrf storetwo
   banksel TRISC
   bsf TRISC,5
;wait 
   banksel PORTB
   btfsc PORTB,1
   goto $-.1
   movlw 4
   movwf count
;coutinue1  
   rlf storetwo,1
   bsf PORTC,3
   nop
   bcf PORTC,3       ;下降沿触发
   nop
   btfsc PORTC,5
   incf storetwo,1
   decfsz count,1
   goto $-.8
   movlw 8
   movwf count
;coutinue2  
   rlf storeone,1
   bsf PORTC,3
   nop
   bcf PORTC,3
   nop
   btfsc PORTC,5
   incf storeone,1
   decfsz count,1
   goto $-.8
   endm

RST code 0x00
   nop
   clrf PCLATH
   ;pagesel start
   goto start
   nop
   goto ISR
PGM code
start
   banksel TRISC   ;初始化,配置一些寄存器
   clrf TRISC
   banksel SSPCON
   bcf SSPCON,SSPEN
   banksel T1CON
   bcf T1CON,TMR1ON
   banksel TMR0
   movlw timevalue
   movwf TMR0
   banksel INTCON
   clrf INTCON
   bsf INTCON,GIE   
   bcf INTCON,INTF   
   bcf INTCON,T0IF   
   bcf INTCON,RBIF   
   bsf INTCON,INTE  ;允许INT中断
   bsf INTCON,T0IE  ;允许TIMER0中断
   bsf INTCON,RBIE  ;允许RB中断
   banksel OPTION_REG
   clrf OPTION_REG
   banksel TRISB
   bcf TRISB,2
   bcf TRISB,3
   bsf TRISB,1
   bsf TRISB,7
   banksel PORTB
   bsf PORTB,2
   bcf PORTB,3
   banksel TRISA
   movlw 0xff
   movwf TRISA
   banksel TRISD
   bcf TRISD,1
   banksel PORTC
   bsf PORTC,1
   bsf PORTC,0
   banksel PORTD
   bsf PORTD,1
   movlw datax  ;对LRS5752进行初始化 datax=0x78
   movwf input
   movlw 8
   movwf count
LOOP    ;初始化解码芯片
   movlw 0xff
   andwf input,1
   btfsc input,0
   bsf PORTC,4
   bcf PORTC,4
   bcf PORTC,3
   nop
   bsf PORTC,3
   nop
   rrf input,1
   decfsz count,1
   goto LOOP
   bcf PORTC,0
   data_tx 0x60,MODE   ;写寄存器的值
   data_tx 0x61,PICTURE
   data_tx 0x62,COLOR
   data_tx 0x63,TINT
   data_tx 0x64,PHASE
   data_tx 0x65,CONTVIDEO
   data_tx 0x66,CONTRGB1 
   data_tx 0x67,CONTRGB2
   data_tx 0x68,GAMMA1
   data_tx 0x69,GAMMA2
   data_tx 0x6a,RGBAMP
   data_tx 0x6b,BRIGHT
   data_tx 0x6c,SUBBRIGHT_R
   data_tx 0x6d,SUBBRIGHT_B
   data_tx 0x6e,COM_AMP
   data_tx 0x6f,COM_DC
   data_tx 0x70,DACOUT
   movlw 0x50   ;0x50-0x52作为模式选择的储存值
   movwf FSR    ;存取值分别为0x20,0x21,0x23,进行PAL,NTSC,自动检测之间的转换
   movlw 0x20
   movwf INDF
   incf FSR,1
   movlw 0x21
   movwf INDF
   incf FSR,1
   movlw 0x23
   movwf INDF
   movlw 0x60   ;0x60-0x67作为用户选择的存储值,调整PICTURE,COLOR,BRIGHT,COMAMPITUDE四种因素
   movwf FSR    ;需要的话可再增加
   movlw 0x61   ;先是地址值,然后是对应的写入值
   movwf INDF
   incf FSR,1
   movlw PICTURE
   movwf INDF
   incf FSR,1
   movlw 0x62
   movwf INDF
   incf FSR,1
   movlw COLOR
   movwf INDF
   incf FSR,1
   movlw 0x6b
   movwf INDF
   incf FSR,1
   movlw BRIGHT
   movwf INDF
   incf FSR,1
   movlw 0x6e
   movwf INDF
   incf FSR,1
   movlw COM_AMP
   movwf INDF
   incf FSR,1
   movlw 0x50
   movwf modeaddress
   movlw 0x60
   movwf selectaddress
   movlw 0x61
   movwf selectvalue
   goto $
ISR 
    nop
    nop
    banksel INTCON    ;中断程序
    btfss INTCON,INTF  ;是否为INT中断
    goto step1
    goto intservice
step1
    btfss INTCON,T0IF  ;是否为定时器中断
    goto step2
    goto timersevice
step2
    btfss INTCON,RBIF ;是否为RB中断
    goto $
    goto irservice
    
intservice
    bcf INTCON,INTF   ;判断为INT中断
    push 
    call delay
    banksel PORTB
    bcf PORTB,2
    gettouchvalue controlx,bufferx1,bufferx2
    gettouchvalue controly,buffery1,buffery2
    nop
    nop
    call delay
    bsf PORTB,2        ;晶振为4MHz
    banksel TRISC  ;将触摸屏的值传送出去          
    movwf 0x80        
    movwf TRISC   ; TX/RX口输入输出配置
    banksel SPBRG    
    movlw D'24'    ; 十进制的24
    movwf SPBRG  ; 大约9600 BPS/ 10MHZ
    banksel TXSTA 
    clrf TXSTA  
    bsf TXSTA,BRGH  ; HIGH SPEED/ASYN/8BITS
    bsf TXSTA,TXEN  
    banksel RCSTA
    bsf RCSTA,SPEN
    banksel TXREG
    movf bufferx2,w ;共12位,先传高4位,再传低8位
    movwf TXREG
    call TXPOLL
    movf bufferx1,w
    movwf TXREG
    call TXPOLL
    movf buffery2,w
    movwf TXREG
    call TXPOLL
    movf buffery1,w
    movwf TXREG
    call TXPOLL    ;中断返回
    nop
    nop
    pop
    retfie
TXPOLL
    bsf STATUS,RP0
TLOOP
    btfss TXSTA,TRMT   ;发送完成
    goto TLOOP
    bcf STATUS,RP0
    return

timersevice     ;定时器中断,轮询4个按键,看哪个按下,并进行相应的处理
    push
    banksel PORTA
    btfss PORTA,5
    goto judge1
    goto modeselect
modeselect         ;模式选择,RA5按下
    call delay
    banksel modeaddress
    incf modeaddress,1
    movf modeaddress,w
    sublw 0x52
    btfsc STATUS,C
    call recoveraddress1
    movlw 0x60
    movwf shipinaddress
    movf modeaddress,w
    movwf shipinvalue
    data_select 
    goto recovertimer
recoveraddress1
    movlw 0x50
    movwf modeaddress
    return
judge1           ;用户菜单选择,RA0按下
    banksel PORTA
    btfss PORTA,0
    goto judge2
    goto menuselect
menuselect
    call delay
    movlw .2
    addwf selectaddress,1
    addwf selectvalue,1
    movf selectaddress,w
    sublw 0x66
    btfsc STATUS,C
    call recoveraddress2
    goto recovertimer
recoveraddress2
    movlw 0x60
    movwf selectaddress
    movlw 0x61
    movwf selectvalue
    return
judge2
    banksel PORTA    ;数值增加,RA2按下
    btfss PORTA,2
    goto judge3
    goto  incresing
incresing
    call delay
    movf selectvalue,w
    addlw .2
    movwf selectvalue
    movwf shipinvalue
    movf selectaddress,w
    movwf shipinaddress
    data_select
    goto recovertimer
judge3
    banksel PORTA      ;数值减小,RA1按下
    btfsc PORTA,1
    goto decresing
    goto recovertimer
decresing            
    call delay
    movf selectvalue,w
    sublw .2
    movwf selectvalue
    movwf shipinvalue
    movf selectaddress,w
    movwf shipinaddress
    data_select
    goto recovertimer
recovertimer           ;定时器中断返回
    banksel TMR0
    movlw timevalue
    movwf TMR0 
    banksel INTCON
    bcf INTCON,T0IF
    pop
    retfie
delay           ;延时去抖动,但按键的释放?
    movlw .100
    movwf count
goon1 nop
    decfsz count,1
    goto goon1
    return

irservice         ;IR中断处理
    banksel INTCON    
    bcf INTCON,RBIF
    bcf INTCON,T0IE   ;关定时器
    bcf INTCON,RBIE   ;RB输入
    movf TMR0,w       ;保存TMR0
    movwf tmr0_temp
    push
    call delay4.6ms
    movlw 4
    movf count2,w
    movlw 0x70   
    movwf FSR 
read4datas
    clrf irvalue
    movlw 8
    movwf count
readdata
    banksel PORTB
    btfss PORTB,7     ;等待高电平
    goto $-.1
    call delay0.882ms
    btfsc PORTB,7
    call delay1ms
    rlf irvalue,1
    decfsz count,1
    goto readdata
    goto storedata
storedata   
    movf irvalue,w   
    movwf INDF
    incf FSR,1
    decfsz count2,1
    goto read4datas
    goto check

check                ;校验系统码是否相等,资料码和资料反码之和为0xff
    movf 0x70,w
    subwf 0x71,0
    banksel STATUS
    btfss STATUS,Z
    goto irreturn
    movf 0x72,w
    addwf 0x73,0
    sublw 0xff
    btfss STATUS,Z
    goto irreturn
    goto irdatatx
irdatatx
    banksel TRISC           
    movwf 0x80        
    movwf TRISC   
    banksel SPBRG    
    movlw D'64'    ; 十进制的64
    movwf SPBRG  ; 大约9600 BPS/ 10MHZ
    banksel TXSTA 
    clrf TXSTA  
    bsf TXSTA,BRGH  ; HIGH SPEED/ASYN/8BITS
    bsf TXSTA,TXEN  
    banksel TXREG     ;传送IR资料码
    movf 0x72,w 
    movwf TXREG
    call irTXPOLL
    goto irreturn
irTXPOLL
    bsf STATUS,RP0
irTLOOP
    btfss TXSTA,TRMT
    goto irTLOOP
    bcf STATUS,RP0
    return
irreturn
    banksel INTCON      ;中断返回
    bsf INTCON,T0IE
    bsf INTCON,RBIE
    movf tmr0_temp,w
    movwf TMR0
    pop
    retfie
    
delay1ms      ;2778
    banksel irvalue
    incf irvalue,1
    movlw .16
    movwf count2
counter1 movlw .174
    movwf count
goon4 nop
    decfsz count,1
    goto goon4
    decfsz count2,1
    goto counter1
    return 
    
delay0.882ms    ;2450
    movlw .49
    movwf count2
counter2 movlw .50
    movwf count
goon3 nop
    decfsz count,1
    goto goon3
    decfsz count2,1
    goto counter2
    return 

delay4.6ms       ;12778
    movlw .68
    movwf count2
counter3 movlw .188
    movwf count
goon2 nop
    decfsz count,1
    goto goon2
    decfsz count2,1
    goto counter2
    return
    end 



⌨️ 快捷键说明

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