日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

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

請(qǐng)whatcall指點(diǎn)一下程序的錯(cuò)誤....

PIC單片機(jī)16F877,這個(gè)程序是用來檢測(cè)輸入電壓的,,,用RA0腳檢測(cè)輸入電壓,左偏置,只取高8位,,,,RA3~RA5與PC0~PC7配合用來顯示檢測(cè)電壓的數(shù)字0~256之間,,,目前仿真和測(cè)試都不正常,,,請(qǐng)版主指點(diǎn)一下...
全部回復(fù)(5)
正序查看
倒序查看
2007-07-13 12:25
這個(gè)是目前編的程序:
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
回復(fù)
whatcall
LV.5
3
2007-07-13 18:40
@藏經(jīng)閣
這個(gè)是目前編的程序: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
指點(diǎn)不敢當(dāng).沒有仔細(xì)的看,有以下幾個(gè)意見:
(1)專用寄存器最好還是用MPLAB自帶的,省事不容易出錯(cuò).include一下16F877對(duì)應(yīng)的可包含文件(類似于C中的頭文件).
(2)沒看到你的CONFIG配置,是否是直接在MPLAB IDE中進(jìn)行的?WDT有沒有關(guān)掉?請(qǐng)檢查一下,最好還是寫在源文件里.
(3)ORG 00h后你的指令覆蓋了中斷向量0x004的地址,如果你用到中斷這里就是很大的錯(cuò)誤.應(yīng)該在0x004之前用goto跳轉(zhuǎn)到主程序的地址.
另外“仿真和測(cè)試都不正?!笔侵甘裁礃拥默F(xiàn)象?用ICD2調(diào)試的話直接step進(jìn)去一條條執(zhí)行或設(shè)斷點(diǎn)我想應(yīng)該是可以查出問題的.如果壓根就不可以調(diào)試,先檢查硬件鏈接,在檢查CONFIG的配置選項(xiàng).總之,首先要確保MCU的時(shí)鐘已經(jīng)建立起來.
0
回復(fù)
2007-07-16 09:42
@whatcall
指點(diǎn)不敢當(dāng).沒有仔細(xì)的看,有以下幾個(gè)意見:(1)專用寄存器最好還是用MPLAB自帶的,省事不容易出錯(cuò).include一下16F877對(duì)應(yīng)的可包含文件(類似于C中的頭文件).(2)沒看到你的CONFIG配置,是否是直接在MPLABIDE中進(jìn)行的?WDT有沒有關(guān)掉?請(qǐng)檢查一下,最好還是寫在源文件里.(3)ORG00h后你的指令覆蓋了中斷向量0x004的地址,如果你用到中斷這里就是很大的錯(cuò)誤.應(yīng)該在0x004之前用goto跳轉(zhuǎn)到主程序的地址.另外“仿真和測(cè)試都不正?!笔侵甘裁礃拥默F(xiàn)象?用ICD2調(diào)試的話直接step進(jìn)去一條條執(zhí)行或設(shè)斷點(diǎn)我想應(yīng)該是可以查出問題的.如果壓根就不可以調(diào)試,先檢查硬件鏈接,在檢查CONFIG的配置選項(xiàng).總之,首先要確保MCU的時(shí)鐘已經(jīng)建立起來.
謝謝whatcall的指點(diǎn),,,,
(1)已經(jīng)發(fā)現(xiàn)調(diào)用頭文件確實(shí)比較方便,,,不會(huì)出錯(cuò),,同時(shí)也省去不少事情.
(2)CONFIG 是在MPLAB IDE軟件中配置的,,WDT和中斷都關(guān)掉了
(3)因?yàn)橹袛嚓P(guān)掉了,,所以沒有跳過0004H
已經(jīng)發(fā)現(xiàn)問題所在,,查表程序溢出了,,,程序老是跑飛,,,,原來是算法有問題,,,,

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

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