Re: 0~9999計數程式,請教各位
|
||||
---|---|---|---|---|
版主
|
MPLAB-SIM可以模擬TIMER。所以,您可以利用它,配合WATCH視窗來看出來:
1、TIMER會不會增加。 2、如果TIMER會增加,但是不會產生中斷 (但是該TIMER的FLAG應該還是會變成1才對),那就是沒有將該中斷功能正確啟動。
發表於: 2004/9/28 21:57
|
|||
|
Re: 0~9999計數程式,請教各位
|
||||
---|---|---|---|---|
初級會員
|
感謝版主的友善回應,但因敝人對pic摸索中.只能參照書本範例截取片段,現改寫如下
但還是有問題,電路為RB0~7接7 SEG (SINK MODE),RC 4~7 接PNP以推動 7SEG 煩請再不吝賜教 ;0計數9 ; LIST P=16C73 ; W_STK EQU 0X20 ; STATUS_STK EQU 0X21 ; PCLATH_STK EQU 0X22 ; TMPCNT EQU 0X24 ; CNT EQU 0X25 ; SCANCH EQU 0X26 ; CH EQU 0X27 ; TNR0H EQU 0X28 ; #DEFINE _DIGIT_ADDR 0X30 ; ORG 00H ; GOTO START ; ORG 04H ; MOVF STATUS,W ; CLRF STATUS ; MOVWF STATUS_STK ; MOVF PCLATH,W ; MOVWF PCLATH_STK ; CLRF PCLATH ; BCF STATUS,RP0 ; BTFSC PIR2,CCP2IF ; GOTO INIT ; END_INT: BCF STATUS,RP0 ; MOVF PCLATH_STK,W ; MOVWF PCLATH ; MOVF STATUS_STK,W ; MOVWF STATUS ; MOVF W_STK,W ; RETFIE ; START CALL PIC_INIT ; BSF INTCON,PEIE ; BSF INTCON,GIE ; INIT MOVLW 0FFH ; RESET RB MOVWF RB ;.. MOVWF RC ; MOVLW DSPTB ; 將TABLE表資料,載入TEMP register MOVWF TABN ;.. MOVF TABN,W ;.. MOVWF TEMP ;.. MOVWF TEMP1 ;.. MOVWF TEMP2 ;.. MOVWF TEMP3 ;.. MOVLW 0AH ; 設定計數器CNTT=0A MOVWF CNTT ;.. MOVLW 64H ; 設定計數器CNTH=64H MOVWF CNTH ;.. MOVLW 03H ; 設定計數器CNTK(K1 K2)=03E8H MOVWF CNTK1 ;.. MOVLW 0E8H ; MOVWF CNTK2 ;.. MOVLW 00 ; 設定計數器CNT9X=00 MOVWF CNT9A ; .. MOVWF CNT9B ; .. MOVWF CNT9C ; .. MOVWF CNT9D ; .. MOVLW 01H ; 被減數 be applied for ROUND4 MOVWF ASS ; .. ZERO1 MOVF TABN,W ; 歸零 MOVWF TEMP2 ; .. MOVWF TEMP1 ; .. MOVWF TEMP ; .. ROUND1 CALL RESET ; MOVLW 0AH ; 設定比較器COMP=0A MOVWF COMP ;.. MOVLW 70H ; 設定SCAN個位數 MOVWF SCAND ;.. MOVF SCAND,W ; 將SCANNER 設定RA ENABLE MOVWF RC ;.. MOVF TEMP,W ; (將個位數PC(PROGRAM COUNTER)移至W register CALL LDTAB ; 載入table表至PC MOVWF RB ; 顯示TABLE表數值至個位數 7 seg) ;GOTO END_INT ; ;RETURN ; INCF TEMP ; 每次執行,TEMP數值+1 INCF CNT9A ; 每次執行,CNT9A數值+1 MOVF CNT9A,W ; (XOR運算"CNT9A&COMP"後 XORWF COMP ; ,存入COMP BTFSS 03H,02 ; ZF旗標為"0"則跳行,否則繼續) GOTO ROUND1 ; GOTO INIT ; RESET MOVLW 0FFH ; RESET RB MOVWF RB ;.. RETURN ; PIC_INIT ;Bank1 CLRF INTCON ; ;BSF INTCON,T0IE ; BSF STATUS,RP0 ; MOVLW B'00000000' ; MOVWF TRISB ; MOVLW B'00000000' ; MOVWF TRISC ; CLRF PIE2 ; BSF PIE2,CCP2IE ; ;Bank0 BCF STATUS,RP0 ; MOVLW B'11111111' ; MOVWF RB ; MOVLW 0XFF ; MOVWF RC ; MOVLW B'00110001' ; MOVWF T1CON ; MOVLW B'00001000' ; MOVWF CCP2CON ; MOVLW 0XF4 ; MOVWF CCPR2H ; MOVLW 0X24 ; MOVWF CCPR2L ; RETURN ; LDTAB MOVWF PCL ; ORG 0E0H ; RETLW B'00001000' ;0 RETLW B'11101011' ;1 RETLW B'01010000' ;2 RETLW B'11000000' ;3 RETLW B'10000011' ;4 RETLW B'10000100' ;5 RETLW B'00000100' ;6 RETLW B'10001001' ;7 RETLW B'00000000' ;8 RETLW B'10000001' ;9 RETLW 00 ;
發表於: 2004/10/1 11:36
|
|||
|
Re: 0~9999計數程式,請教各位
|
||||
---|---|---|---|---|
版主
|
良心建議:
1、不要post這麼一大坨程式上來。也許別人有時間幫您debug;但我是沒有。建議先自行研究,找出可能有問題的地方,再丟一小段程式上來問問題。 2、如果是初學者,可到書局買本中文書來入門;或者參加本公司舉辦的教育訓練;或者自行從右方「教材及講義」抓資料自行參考。
發表於: 2004/10/1 12:06
|
|||
|
Re: 0~9999計數程式,請教各位
|
||||
---|---|---|---|---|
初級會員
|
謝謝版主的回應建議,我會就你的建議研究流程.
發表於: 2004/10/4 12:56
|
|||
|
Re: 0~9999計數程式,請教各位
|
||||
---|---|---|---|---|
新會員
|
參照:
我想你的寫程式方式可能要更改建議寫一段測試一段, 這樣可以知道錯誤點在何處這一點比你會寫程式還重要 PQ 上
發表於: 2004/10/11 14:09
|
|||
|