Re: 版主及各位大大請教16F877配合SIM100C傳輸問題
|
||||
---|---|---|---|---|
版主
|
你在接收中斷程式裡呼叫 LCD 顯示副程式會不會造成Over Run 的問題?
發表於: 2006/9/7 15:09
|
|||
|
Re: 版主及各位大大請教16F877配合SIM100C傳輸問題
|
||||
---|---|---|---|---|
版主
|
程式太常無法幫你用看的來找Bug,建議先檢查RS-232收發的訊息市府有錯,LCD 顯示程式單獨測試時功能是否正常,把問題分類後依依測試,建議不要一次寫完後再測試。
發表於: 2006/9/7 9:59
|
|||
|
版主及各位大大請教16F877配合SIM100C傳輸問題
|
||||
---|---|---|---|---|
新會員
|
小弟用PIC16F877的RS232<RX.TX>與SIM100C模組做傳輸,目的是要接收SIM100C模組的回傳值<字串>並顯示於LCM上,電路部份已經無任何問題也可以撥出設定號碼,但是在顯示SIM100C的傳回值卻都是亂碼LCM為WG12864J-YYH-V中英文顯示模組,希望版主或哪位大大幫忙解決一下!小弟程式為下還有<LCD.INC及DELAY.INC兩個副檔>PIC與LCM模組為4-bit傳輸。
主程式: LIST P=16F877, R=DEC #INCLUDE P16F877.INC CBLOCK 0X20 ENDC CBLOCK W_BAK, STATUS_BAK T1, COUNT_N,COUNT_MS,COUNT R0,R1, ENDC ORG 0 NOP GOTO MAIN ; ORG 4 PUSH: MOVWF W_BAK SWAPF STATUS,W CLRF STATUS MOVWF STATUS_BAK BANKSEL PIR1 BTFSS PIR1, RCIF GOTO POP MOVF RCREG,W BCF PIR1,RCIF call putcLCD POP: SWAPF STATUS_BAK,W MOVWF STATUS SWAPF W_BAK,F SWAPF W_BAK,W RETFIE MAIN: BANKSEL SPBRG MOVLW 103 MOVWF SPBRG ; CLRF TXSTA BSF TXSTA,BRGH BSF TXSTA,TXEN ; BANKSEL RCSTA CLRF RCSTA BSF RCSTA,CREN BSF RCSTA,SPEN BANKSEL PIE1 BSF PIE1,RCIE ; BANKSEL PIR1 BCF PIR1,RCIF BSF INTCON,PEIE BSF INTCON,GIE CALL InitLCD CALL clrLCD CALL L1homeLCD MOVLW .8 MOVWF R1 CLRF R0 HELLO: MOVFW R0 CALL WELLCOM call putcLCD INCF R0 DECFSZ R1 GOTO HELLO MAIN1: CALL L3homeLCD MOVLW .200 MOVWF T1 CALL DELAY CALL DELAY CALL S_ATD CALL DELAY CALL DELAY CALL S_ATH CALL DELAY GOTO MAIN1 S_ATD: MOVLW .15 MOVWF R1 CLRF R0 S_ATD_1: MOVFW R0 CALL ATD_addr MOVWF TXREG BCF PIR1,TXIF S_ATD_2: BTFSS PIR1,TXIF GOTO S_ATD_2 INCF R0 DECFSZ R1 GOTO S_ATD_1 RETURN S_ATH: MOVLW .4 MOVWF R1 CLRF R0 S_ATH_1: MOVFW R0 CALL ATH_addr MOVWF TXREG BCF PIR1,TXIF S_ATH_2: BTFSS PIR1,TXIF GOTO S_ATH_2 INCF R0 DECFSZ R1 GOTO S_ATH_1 RETURN WELLCOM: ADDWF PCL,F DT"GSM=測試" ATD_addr: ADDWF PCL,F DT"ATD電話號碼;" retlw 0X0D ATH_addr: ADDWF PCL,F DT "ATH" retlw 0X0D #INCLUDE <LCD.INC> ; ; ; Defines for I/O ports that provide LCD data & control ; ; LCD_DATA equ PORTA ; LCD_CNTL equ PORTA ; ; RS equ 4 ; RS=PORTA,4 ; E equ 5 ; #INCLUDE <delay.inc> END 副檔LCD.INC DISP_ON EQU 0x00c DISP_ON_C EQU 0x00E DISP_ON_B EQU 0x00F DISP_OFF EQU 0x008 CLR_DISP EQU 0x001 ENTRY_INC EQU 0x006 ENTRY_INC_S EQU 0x007 ENTRY_DEC EQU 0x004 ENTRY_DEC_S EQU 0x005 DD_RAM_ADDR EQU 0x080 DD_RAM_UL EQU 0x080 CBLOCK Byte_LCD, Count, Count1, Count2, Posit_LCD, SystemFlag1 Byte, Byte1 ENDC PUT_STRING MACRO STR_NO movlw STR_NO-Msg1 call Message ENDM SET_CURSOR MACRO CUR_X,CUR_Y movlw 0x80 + ((0x40*CUR_Y)+CUR_X) call SendCmd ENDM InitLCD BANKSEL ADCON1 MOVLW B'10000110' MOVWF ADCON1 BANKSEL TRISA MOVLW 0 MOVWF TRISA MOVWF TRISC BANKSEL PORTC bcf PORTC, 0 call LongDelay bsf PORTC, 0 call Delay bcf STATUS,RP0 bcf STATUS,RP1 clrf LCD_DATA ; movwf LCD_DATA ; bsf STATUS,RP0 ; btfsc PCON,NOT_POR ; goto InitLCDEnd ; bcf STATUS,RP0 call Delay movlw 0x02 movwf LCD_DATA ; call Delay bsf LCD_CNTL, E ; nop bcf LCD_CNTL, E call Delay movlw 0x02 movwf LCD_DATA ; call Delay bsf LCD_CNTL, E ; nop bcf LCD_CNTL, E movlw b'00000000' movwf LCD_DATA ; call Delay bsf LCD_CNTL, E ; nop bcf LCD_CNTL, E ; call Delay ; call SendCmd movlw DISP_ON_B call SendCmd ; call Delay call clrLCD call LongDelay movlw ENTRY_INC call SendCmd movlw DD_RAM_ADDR call SendCmd call Delay InitLCDEnd return putcLCD banksel Byte_LCD movwf Byte_LCD call Delay swapf Byte_LCD,W andlw 0x0f movwf LCD_DATA bsf LCD_CNTL, RS nop bsf LCD_CNTL, E nop bcf LCD_CNTL, E movf Byte_LCD,W andlw 0x0f movwf LCD_DATA bsf LCD_CNTL, RS call Delay nop bsf LCD_CNTL, E nop bcf LCD_CNTL, E incf Posit_LCD return putDIGIT: banksel Byte bsf SystemFlag1,0 andlw 0x0f goto Hex_Loop putHexLCD: banksel Byte bcf SystemFlag1,0 movwf Byte swapf Byte,W Hex_Loop bcf SystemFlag1,1 andlw 0x0f movwf Byte1 sublw .09 btfsc STATUS,C goto Add_W_30A Add_W_37A movlw 0x37 goto Show_High_Nibble Add_W_30A movlw 0x30 Show_High_Nibble addwf Byte1,F call Delay swapf Byte1,W Write_LCD_Bus andlw 0x0f movwf LCD_DATA nop bsf LCD_CNTL, RS nop bsf LCD_CNTL, E nop bcf LCD_CNTL, E btfsc SystemFlag1,1 goto Test_Char_Finish movf Byte1,W bsf SystemFlag1,1 goto Write_LCD_Bus Test_Char_Finish: btfsc SystemFlag1,0 return movf Byte,W andlw 0x0f bsf SystemFlag1,0 goto Hex_Loop SetCurLCD return SendCmd movwf Byte_LCD call Delay swapf Byte_LCD,W andlw 0x0f movwf LCD_DATA bcf LCD_CNTL,RS bsf LCD_CNTL,E nop bcf LCD_CNTL,E movf Byte_LCD,W andlw 0x0f movwf LCD_DATA call Delay bcf LCD_CNTL,RS bsf LCD_CNTL,E nop bcf LCD_CNTL,E return clrLCD BANKSEL CLR_DISP movlw CLR_DISP call SendCmd call LongDelay return curonLCD movlw DISP_ON_C call SendCmd return curblkLCD movlw DISP_ON_B call SendCmd return movlw DISP_ON call SendCmd return movcurLCD BANKSEL Posit_LCD addwf Posit_LCD movf Posit_LCD,w call SendCmd return movcurLCD_R BANKSEL Posit_LCD incf Posit_LCD movf Posit_LCD,w call SendCmd return movcurLCD_L BANKSEL Posit_LCD decf Posit_LCD movf Posit_LCD,w call SendCmd return L1homeLCD banksel Posit_LCD movlw DD_RAM_ADDR|0x00 movwf Posit_LCD call SendCmd return L2homeLCD banksel Posit_LCD movlw DD_RAM_ADDR|0x10 movwf Posit_LCD call SendCmd return L3homeLCD banksel Posit_LCD movlw DD_RAM_ADDR|0x08 movwf Posit_LCD call SendCmd return L4homeLCD banksel Posit_LCD movlw DD_RAM_ADDR|0x18 movwf Posit_LCD call SendCmd return Delay clrf Count movlw 0x01 movwf Count1 Dloop decfsz Count,f goto Dloop decfsz Count1 goto Dloop return LongDelay clrf Count clrf Count1 movlw .2 movwf Count2 LDloop decfsz Count,f goto LDloop decfsz Count1,f goto LDloop decfsz Count2,f goto LDloop return Hex2BCD: clrf Byte1 next_BCD1: movwf Byte movlw 10 subwf Byte, w btfss STATUS, C return incf Byte1 goto next_BCD1 return BCD2Hex: movlw 0 incf Byte1 next_Hex2: decfsz Byte1,f goto next_Hex1 goto next_Hex3 next_Hex1: addlw 10 goto next_Hex2 next_Hex3: addwf Byte, w return putBCDLCD: call Hex2BCD show_BCD: movfw Byte1 addlw "0" call putcLCD movfw Byte addlw "0" call putcLCD end_putBCDLCD: return Hex2TwoByte: movwf Byte1 andlw 0x0f movwf Byte swapf Byte1,W andlw 0x0f movwf Byte1 return
發表於: 2006/9/6 20:15
|
|||
|