性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

請whatcall指點一下程序的錯誤....

PIC單片機16F877,這個程序是用來檢測輸入電壓的,,,用RA0腳檢測輸入電壓,左偏置,只取高8位,,,,RA3~RA5與PC0~PC7配合用來顯示檢測電壓的數(shù)字0~256之間,,,目前仿真和測試都不正常,,,請版主指點一下...
全部回復(5)
正序查看
倒序查看
2007-07-13 12:25
這個是目前編的程序:
tmr0 equ 01h
pcl equ 02h
status equ 03h
porta equ 05h
portc equ 07h
intcon equ 0bh
pir1 equ 0ch
option1 equ 81h
trisa equ 85h
trisc equ 87h
adcon0 equ 1fh
adcon1 equ 9fh
adresh equ 1eh
adresl equ 9eh
;---------------
temp1 equ 20h
temp2 equ 21h
temp3 equ 22h
hundred equ 23h  
ten equ 24h
piece equ 25h
;-----------------
start:
org 00h
;config relevant register
movlw 00h
movwf intcon   ;config timer0
movlw b'00000111'
movwf option1   ;setup prescaler to 1:256
;***************
banksel trisa
movlw b'00000001'
movwf trisa
movlw 00h
movwf trisc
;****************
banksel adcon0
movlw b'01000001'
movwf adcon0
banksel adcon1
movlw b'00001110'
movwf adcon1  ;only take adresh
;****************
banksel adcon0
display:
call delay
bsf adcon0,2
check:
btfss pir1,6
goto check
movf adresh,0
;///////////////
clrf temp1
clrf temp2
clrf hundred
clrf ten
clrf piece
;//////////////
bsf status,0
movwf temp1
lp100:
movlw temp1
movwf temp2
movlw 64h
subwf temp1,1
incf hundred,1
btfsc status,0
goto lp100
;reset
movlw temp2
movwf temp1
decf hundred,1
bsf status,0
lp10:
movlw temp1
movwf temp2
movlw 0ah
subwf temp1,1
incf ten,1
btfsc status,0
goto lp10
movlw temp2
movwf piece
decf ten,1
goto display
;-----------------------
delay:    ;dalay program
clrf tmr0
bcf intcon,2
;//////////////////
loop:
movlw b'11111011'
movwf porta
movf piece,0
call table
movwf portc
movlw b'11110111'
movwf porta
movf ten,0
call table
movwf portc
movlw b'11101111'
movwf porta
movf hundred,0
call table
movwf portc
btfss intcon,2
goto loop
;/////////////////
return
;---------------------
;table list
table:
addwf pcl,1
retlw b'11000000' ;0
retlw b'11111001' ;1
retlw b'10100100' ;2
retlw b'10110000' ;3
retlw b'10011001' ;4
retlw b'10010010' ;5
retlw b'10000010' ;6
retlw b'11111000' ;7
retlw b'10000000' ;8
retlw b'10010000' ;9
end
0
回復
whatcall
LV.5
3
2007-07-13 18:40
@藏經(jīng)閣
這個是目前編的程序:tmr0equ01hpclequ02hstatusequ03hportaequ05hportcequ07hintconequ0bhpir1equ0choption1equ81htrisaequ85htriscequ87hadcon0equ1fhadcon1equ9fhadreshequ1ehadreslequ9eh;---------------temp1equ20htemp2equ21htemp3equ22hhundredequ23h  tenequ24hpieceequ25h;-----------------start:org00h;configrelevantregistermovlw00hmovwfintcon  ;configtimer0movlwb'00000111'movwfoption1  ;setupprescalerto1:256;***************bankseltrisamovlwb'00000001'movwftrisamovlw00hmovwftrisc;****************bankseladcon0movlwb'01000001'movwfadcon0bankseladcon1movlwb'00001110'movwfadcon1  ;onlytakeadresh;****************bankseladcon0display:calldelaybsfadcon0,2check:btfsspir1,6gotocheckmovfadresh,0;///////////////clrftemp1clrftemp2clrfhundredclrftenclrfpiece;//////////////bsfstatus,0movwftemp1lp100:movlwtemp1movwftemp2movlw64hsubwftemp1,1incfhundred,1btfscstatus,0gotolp100;resetmovlwtemp2movwftemp1decfhundred,1bsfstatus,0lp10:movlwtemp1movwftemp2movlw0ahsubwftemp1,1incften,1btfscstatus,0gotolp10movlwtemp2movwfpiecedecften,1gotodisplay;-----------------------delay:    ;dalayprogramclrftmr0bcfintcon,2;//////////////////loop:movlwb'11111011'movwfportamovfpiece,0calltablemovwfportcmovlwb'11110111'movwfportamovften,0calltablemovwfportcmovlwb'11101111'movwfportamovfhundred,0calltablemovwfportcbtfssintcon,2gotoloop;/////////////////return;---------------------;tablelisttable:addwfpcl,1retlwb'11000000';0retlwb'11111001';1retlwb'10100100';2retlwb'10110000';3retlwb'10011001';4retlwb'10010010';5retlwb'10000010';6retlwb'11111000';7retlwb'10000000';8retlwb'10010000';9end
指點不敢當.沒有仔細的看,有以下幾個意見:
(1)專用寄存器最好還是用MPLAB自帶的,省事不容易出錯.include一下16F877對應的可包含文件(類似于C中的頭文件).
(2)沒看到你的CONFIG配置,是否是直接在MPLAB IDE中進行的?WDT有沒有關掉?請檢查一下,最好還是寫在源文件里.
(3)ORG 00h后你的指令覆蓋了中斷向量0x004的地址,如果你用到中斷這里就是很大的錯誤.應該在0x004之前用goto跳轉到主程序的地址.
另外“仿真和測試都不正?!笔侵甘裁礃拥默F(xiàn)象?用ICD2調(diào)試的話直接step進去一條條執(zhí)行或設斷點我想應該是可以查出問題的.如果壓根就不可以調(diào)試,先檢查硬件鏈接,在檢查CONFIG的配置選項.總之,首先要確保MCU的時鐘已經(jīng)建立起來.
0
回復
2007-07-16 09:42
@whatcall
指點不敢當.沒有仔細的看,有以下幾個意見:(1)專用寄存器最好還是用MPLAB自帶的,省事不容易出錯.include一下16F877對應的可包含文件(類似于C中的頭文件).(2)沒看到你的CONFIG配置,是否是直接在MPLABIDE中進行的?WDT有沒有關掉?請檢查一下,最好還是寫在源文件里.(3)ORG00h后你的指令覆蓋了中斷向量0x004的地址,如果你用到中斷這里就是很大的錯誤.應該在0x004之前用goto跳轉到主程序的地址.另外“仿真和測試都不正?!笔侵甘裁礃拥默F(xiàn)象?用ICD2調(diào)試的話直接step進去一條條執(zhí)行或設斷點我想應該是可以查出問題的.如果壓根就不可以調(diào)試,先檢查硬件鏈接,在檢查CONFIG的配置選項.總之,首先要確保MCU的時鐘已經(jīng)建立起來.
謝謝whatcall的指點,,,,
(1)已經(jīng)發(fā)現(xiàn)調(diào)用頭文件確實比較方便,,,不會出錯,,同時也省去不少事情.
(2)CONFIG 是在MPLAB IDE軟件中配置的,,WDT和中斷都關掉了
(3)因為中斷關掉了,,所以沒有跳過0004H
已經(jīng)發(fā)現(xiàn)問題所在,,查表程序溢出了,,,程序老是跑飛,,,,原來是算法有問題,,,,

但這個程序運行出來的效果還是不太理想,,,,主要是低位顯示老是不太穩(wěn)定,,,,不知道是否是因為沒有采用軟件濾波的緣故,,,,還是顯示設置有問題??
0
回復
whatcall
LV.5
5
2007-07-16 13:22
@藏經(jīng)閣
謝謝whatcall的指點,,,,(1)已經(jīng)發(fā)現(xiàn)調(diào)用頭文件確實比較方便,,,不會出錯,,同時也省去不少事情.(2)CONFIG是在MPLABIDE軟件中配置的,,WDT和中斷都關掉了(3)因為中斷關掉了,,所以沒有跳過0004H已經(jīng)發(fā)現(xiàn)問題所在,,查表程序溢出了,,,程序老是跑飛,,,,原來是算法有問題,,,,但這個程序運行出來的效果還是不太理想,,,,主要是低位顯示老是不太穩(wěn)定,,,,不知道是否是因為沒有采用軟件濾波的緣故,,,,還是顯示設置有問題??
低位不穩(wěn)定是正常的,信號本來就有點波動,ADC采樣也會有些誤差.你可以把刷新的間隔設大一點(比如500ms),畢竟刷新太快人眼難以分辨也沒有什么意義反而會造成低位閃爍不定的狀況.
0
回復
2007-07-17 09:36
@whatcall
低位不穩(wěn)定是正常的,信號本來就有點波動,ADC采樣也會有些誤差.你可以把刷新的間隔設大一點(比如500ms),畢竟刷新太快人眼難以分辨也沒有什么意義反而會造成低位閃爍不定的狀況.
昨天晚上回家再弄了一下,,,,發(fā)現(xiàn)是A/D轉換前延遲的時間太久了,,,,改短了就基本穩(wěn)定了,,,,如果加上軟件濾波效果應該更好,,,,改天試試,,,,

現(xiàn)在發(fā)現(xiàn)一個新問題:就是數(shù)碼管顯示的余輝會讓數(shù)字顯示不是很清楚,,,不知到是數(shù)碼管的問題還是其它問題,,,版主有沒有碰到過??
0
回復
發(fā)