99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

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

在線尋求幫助(pic匯編)

我在做實(shí)驗(yàn),是
有關(guān)鍵盤程序
及數(shù)據(jù)傳輸?shù)?

編譯沒有錯(cuò),
但是運(yùn)行不了

哪個(gè)哥哥幫我下
全部回復(fù)(11)
正序查看
倒序查看
superrz13
LV.1
2
2007-07-16 16:21
貼出來看看
0
回復(fù)
2007-09-03 18:00
@superrz13
貼出來看看
;按鍵掃描程序070831
;********定義存器************
   status   equ   3h    ;定義狀態(tài)寄存器地址
   portb    equ   6h    ;定義端口B數(shù)據(jù)寄存器地址
   trisb    equ   86h   ;定義端口B方向控制寄存器地址
   portc    equ   7h    ;定義端口C數(shù)據(jù)寄存器地址
   trisc    equ   87h    ;
   rp0      equ   5h     ;定義狀態(tài)寄存器中的體選位
   rp1      equ   5h
   z        equ   2h      ;定義零標(biāo)志位置
   fsr      equ   04h
   option_reg   equ  81h   ;定義選項(xiàng)寄存器
   rbup     equ   7      ;定義上拉電阻使能位位地址
   data1    equ   20h    ;定義延時(shí)變量寄存器
   data2    equ   21h
   n2       equ   0ffh   ;定義延時(shí)常數(shù)
   value    equ   22h     ;暫存按鍵列碼和位置碼
    table    equ   40h    ;建在RAM中的按鍵位置碼表表頭
                          ;地址,該表由16個(gè)元素單元組成,
                          ;對應(yīng)16個(gè)鍵
;*******主程序**************
   org   0000h
   nop
   bcf   status,rp1      ;選擇狀態(tài)寄存器體0
   bsf   status,rp0      ;置位RP0為1
   movlw  00h
   movwf  trisc          ;設(shè)置端口C為輸出口
   movlw  0ffh
   movwf  trisb           ;設(shè)置端口了為輸入口
   bcf   status,rp0
   movlw  0f0h             ;11110000送C顯示
   movwf  portc
;********建立查表*************
   movlw   77h   ;0健健值碼
   movwf   40h
   movlw   0b7h   ;1
   movwf   41h
   movlw   0d7h   ;2
   movwf   42h  
   movlw   0e7h    ;3
   movwf   43h
   movlw   7bh     ;4
   movwf   44h
   movlw   0bbh    ;5
   movwf   45h    
   movlw   0dbh    ;6
   movwf   46h
   movlw   0ebh    ;7
   movwf   47h
   movlw   7dh     ;8
   movwf   48h
   movlw   0bdh    ;9
   movwf   49h
   movlw   0ddh    ;A
   movwf   4ah
   movlw   0edh    ;B
   movwf   4bh
   movlw   7eh     ;C
   movwf   4ch
   movlw   0beh    ;D
   movwf   4dh
   movlw   0deh    ;E
   movwf   4eh
   movlw   0eeh    ;F
   movwf   4fh
check
   call   keyscan    ;調(diào)用按鍵掃描程序
   comf   value,0    ;取反鍵值存儲結(jié)果放入W
   btfsc  status,z   ;測試是否有鍵按下?有!跳過下一條指令
   goto   check      ;無,則循環(huán)檢測
   movlw  .13        ;送立即數(shù)13到DATA1
   movwf  data1      
   call   delay      ;調(diào)用延時(shí)程序,去抖動(dòng)
   call   keyscan    ;再次調(diào)用鍵盤掃描程序
   comf   value,0    ;
   btfsc  status,z   ;再次判斷是否有按鍵按下
   goto   check      ;無,繼續(xù)檢測
   call   translate         ;調(diào)用位置碼翻譯程序
   movf   fsr,0      ;FSR內(nèi)容送到W
   movwf   portc     ;送C口顯示
check1
   movlw   .117
   movwf   data1      ;送立即數(shù)117以便產(chǎn)生100MS延時(shí)
   call    delay      ;調(diào)用延時(shí)
   call    delay
   movlw   0f0h        ;送11110000到W
   xorwf   portc,1    ;C端口寄存器內(nèi)容與W內(nèi)容異或
                      ;提示按鍵未放開
   call    keyscan     ;再次調(diào)用按鍵掃描程序
   comf    value,0     ;位置碼取反送W
   btfss   status,z    ;測試按鍵是否放開?是,跳過下一條指令
   goto    check1      ;否,則循環(huán)檢測
   goto    check        ;是,大循環(huán)
;*********鍵盤掃描程序和按鍵識別子程序******************
;出口參數(shù),有鍵按下時(shí)寄存器calue=等于按鍵位置碼,無按下時(shí)=ff
keyscan
   bcf   status,rp1      ;設(shè)置到體1
   bsf   status,rp0
   bcf   option_reg,rbup  ;啟用上拉電阻
   movlw   0fh            ;送00001111到B端口方向寄存器
   movwf   trisb          ;RB0-RB3為輸出,RB4-7為輸入口
   bcf   status,rp0       ;設(shè)置到體0
   movlw   00h
   movwf   portb          ;送00000000到B口寄存器
   nop
   nop                    ;空指令等數(shù)據(jù)穩(wěn)定
   movf    portb,0         ;B口內(nèi)容傳給W
   andlw   0fh             ;B口寄存器與00001111相與結(jié)果放入W
   movwf   value           ;結(jié)果放健值寄存器
   xorlw   0fh             ;與00001111相異或
   btfsc   status,z         ;結(jié)果是否為零無鍵按下,為1有鍵按下
   goto   nokey             ;為0無鍵按下
   bsf    status,rp0       ;有鍵按下,設(shè)置文件體1
   bcf    option_reg,7
   movlw  0f0h             ;送11110000到B口
   movwf   trisb           ;設(shè)置RB0-3輸入RB4-7為輸出
   bcf    status,rp0       ;恢復(fù)體0
   movf   value,0       ;鍵值寄存器內(nèi)容入W
   movwf   portb           ;放入B口寄存器
   nop
   nop
   movf   portb,0          ;讀B口寄存器內(nèi)容,放入W
   andlw  0f0h             ;B口和FFFF0000相與
   iorwf   value,1         ;將行碼秘列碼合起來放入鍵值寄存器
   return
nokey
   movlw   0ffh          ;建立一個(gè)標(biāo)志值
   movwf   value
   return
;*******健位碼/鍵值翻譯程序*********
;出口參數(shù):正常時(shí)寄存器FSR=鍵值;失常時(shí)=AAh
translate
   movlw   40h         ;指針地址,FSR設(shè)置表頭地址
   movwf   fsr         ;也就是給文件選擇寄存器設(shè)置初始置
loopt1
   movf    0,0         ;以間接尋址方式讀表,并入W
   xorwf   value,0     ;與鍵值寄存器內(nèi)容比較
   btfsc   status,z    ;相等嗎?否,跳過下一步
   goto    loopt2      ;是,跳轉(zhuǎn)
   incf    fsr,1       ;地址指針加一
   btfss   fsr,4       ;查到尾了嗎?
   goto    loopt1      ;否,繼續(xù)查表
   movlw   0aah        ;是,位置碼超限
   movwf   fsr         ;返回以01010101做標(biāo)志
   return              ;子程序返回
loopt2
   bcf    fsr,6        ;等效FSR-40H
   return              ;在FSR中得到健值
;*******延時(shí)程序******************
;入口參數(shù),外循環(huán)這量data1作定時(shí)常數(shù)
delay
lp0  movlw   n2
     movwf   data2
lp1  decfsz   data2,1
     goto   lp1
     decfsz   data1,1
     goto   lp0
     return
     end




高手指點(diǎn)一下哪里有錯(cuò)
0
回復(fù)
ptan
LV.3
4
2007-09-04 11:54
@雨樹淋風(fēng)
;按鍵掃描程序070831;********定義存器************  status  equ  3h    ;定義狀態(tài)寄存器地址  portb    equ  6h    ;定義端口B數(shù)據(jù)寄存器地址  trisb    equ  86h  ;定義端口B方向控制寄存器地址  portc    equ  7h    ;定義端口C數(shù)據(jù)寄存器地址  trisc    equ  87h    ;  rp0      equ  5h    ;定義狀態(tài)寄存器中的體選位  rp1      equ  5h  z        equ  2h      ;定義零標(biāo)志位置  fsr      equ  04h  option_reg  equ  81h  ;定義選項(xiàng)寄存器  rbup    equ  7      ;定義上拉電阻使能位位地址  data1    equ  20h    ;定義延時(shí)變量寄存器  data2    equ  21h  n2      equ  0ffh  ;定義延時(shí)常數(shù)  value    equ  22h    ;暫存按鍵列碼和位置碼    table    equ  40h    ;建在RAM中的按鍵位置碼表表頭                          ;地址,該表由16個(gè)元素單元組成,                          ;對應(yīng)16個(gè)鍵;*******主程序**************  org  0000h  nop  bcf  status,rp1      ;選擇狀態(tài)寄存器體0  bsf  status,rp0      ;置位RP0為1  movlw  00h  movwf  trisc          ;設(shè)置端口C為輸出口  movlw  0ffh  movwf  trisb          ;設(shè)置端口了為輸入口  bcf  status,rp0  movlw  0f0h            ;11110000送C顯示  movwf  portc;********建立查表*************  movlw  77h  ;0健健值碼  movwf  40h  movlw  0b7h  ;1  movwf  41h  movlw  0d7h  ;2  movwf  42h    movlw  0e7h    ;3  movwf  43h  movlw  7bh    ;4  movwf  44h  movlw  0bbh    ;5  movwf  45h      movlw  0dbh    ;6  movwf  46h  movlw  0ebh    ;7  movwf  47h  movlw  7dh    ;8  movwf  48h  movlw  0bdh    ;9  movwf  49h  movlw  0ddh    ;A  movwf  4ah  movlw  0edh    ;B  movwf  4bh  movlw  7eh    ;C  movwf  4ch  movlw  0beh    ;D  movwf  4dh  movlw  0deh    ;E  movwf  4eh  movlw  0eeh    ;F  movwf  4fhcheck  call  keyscan    ;調(diào)用按鍵掃描程序  comf  value,0    ;取反鍵值存儲結(jié)果放入W  btfsc  status,z  ;測試是否有鍵按下?有!跳過下一條指令  goto  check      ;無,則循環(huán)檢測  movlw  .13        ;送立即數(shù)13到DATA1  movwf  data1        call  delay      ;調(diào)用延時(shí)程序,去抖動(dòng)  call  keyscan    ;再次調(diào)用鍵盤掃描程序  comf  value,0    ;  btfsc  status,z  ;再次判斷是否有按鍵按下  goto  check      ;無,繼續(xù)檢測  call  translate        ;調(diào)用位置碼翻譯程序  movf  fsr,0      ;FSR內(nèi)容送到W  movwf  portc    ;送C口顯示check1  movlw  .117  movwf  data1      ;送立即數(shù)117以便產(chǎn)生100MS延時(shí)  call    delay      ;調(diào)用延時(shí)  call    delay  movlw  0f0h        ;送11110000到W  xorwf  portc,1    ;C端口寄存器內(nèi)容與W內(nèi)容異或                      ;提示按鍵未放開  call    keyscan    ;再次調(diào)用按鍵掃描程序  comf    value,0    ;位置碼取反送W  btfss  status,z    ;測試按鍵是否放開?是,跳過下一條指令  goto    check1      ;否,則循環(huán)檢測  goto    check        ;是,大循環(huán);*********鍵盤掃描程序和按鍵識別子程序******************;出口參數(shù),有鍵按下時(shí)寄存器calue=等于按鍵位置碼,無按下時(shí)=ffkeyscan  bcf  status,rp1      ;設(shè)置到體1  bsf  status,rp0  bcf  option_reg,rbup  ;啟用上拉電阻  movlw  0fh            ;送00001111到B端口方向寄存器  movwf  trisb          ;RB0-RB3為輸出,RB4-7為輸入口  bcf  status,rp0      ;設(shè)置到體0  movlw  00h  movwf  portb          ;送00000000到B口寄存器  nop  nop                    ;空指令等數(shù)據(jù)穩(wěn)定  movf    portb,0        ;B口內(nèi)容傳給W  andlw  0fh            ;B口寄存器與00001111相與結(jié)果放入W  movwf  value          ;結(jié)果放健值寄存器  xorlw  0fh            ;與00001111相異或  btfsc  status,z        ;結(jié)果是否為零無鍵按下,為1有鍵按下  goto  nokey            ;為0無鍵按下  bsf    status,rp0      ;有鍵按下,設(shè)置文件體1  bcf    option_reg,7  movlw  0f0h            ;送11110000到B口  movwf  trisb          ;設(shè)置RB0-3輸入RB4-7為輸出  bcf    status,rp0      ;恢復(fù)體0  movf  value,0      ;鍵值寄存器內(nèi)容入W  movwf  portb          ;放入B口寄存器  nop  nop  movf  portb,0          ;讀B口寄存器內(nèi)容,放入W  andlw  0f0h            ;B口和FFFF0000相與  iorwf  value,1        ;將行碼秘列碼合起來放入鍵值寄存器  returnnokey  movlw  0ffh          ;建立一個(gè)標(biāo)志值  movwf  value  return;*******健位碼/鍵值翻譯程序*********;出口參數(shù):正常時(shí)寄存器FSR=鍵值;失常時(shí)=AAhtranslate  movlw  40h        ;指針地址,FSR設(shè)置表頭地址  movwf  fsr        ;也就是給文件選擇寄存器設(shè)置初始置loopt1  movf    0,0        ;以間接尋址方式讀表,并入W  xorwf  value,0    ;與鍵值寄存器內(nèi)容比較  btfsc  status,z    ;相等嗎?否,跳過下一步  goto    loopt2      ;是,跳轉(zhuǎn)  incf    fsr,1      ;地址指針加一  btfss  fsr,4      ;查到尾了嗎?  goto    loopt1      ;否,繼續(xù)查表  movlw  0aah        ;是,位置碼超限  movwf  fsr        ;返回以01010101做標(biāo)志  return              ;子程序返回loopt2  bcf    fsr,6        ;等效FSR-40H  return              ;在FSR中得到健值;*******延時(shí)程序******************;入口參數(shù),外循環(huán)這量data1作定時(shí)常數(shù)delaylp0  movlw  n2    movwf  data2lp1  decfsz  data2,1    goto  lp1    decfsz  data1,1    goto  lp0    return    end高手指點(diǎn)一下哪里有錯(cuò)
用仿真器單步跟蹤運(yùn)行,就可以找到問題了,單片機(jī)這東西,要軟硬件結(jié)合分析才行了,光看軟件沒用,別人并不知道你的電路是怎么樣的,
編譯沒有錯(cuò),只能說明你的指令正確,不等于你的軟件邏輯功能正確.
0
回復(fù)
powernj
LV.6
5
2007-09-04 15:34
@ptan
用仿真器單步跟蹤運(yùn)行,就可以找到問題了,單片機(jī)這東西,要軟硬件結(jié)合分析才行了,光看軟件沒用,別人并不知道你的電路是怎么樣的,編譯沒有錯(cuò),只能說明你的指令正確,不等于你的軟件邏輯功能正確.
???
0
回復(fù)
2007-09-04 16:27
@powernj
???
MCD2,這個(gè)程序是李學(xué)海<>的一個(gè)實(shí)例,在MCD2上調(diào)不通.找不到原因.
0
回復(fù)
ptan
LV.3
7
2007-09-05 09:39
@雨樹淋風(fēng)
MCD2,這個(gè)程序是李學(xué)海的一個(gè)實(shí)例,在MCD2上調(diào)不通.找不到原因.
rp0      equ   5h     ;定義狀態(tài)寄存器中的體選位
      rp1      equ   5h

這個(gè)上面是不是定義錯(cuò)了,應(yīng)該是rp1      equ   6h
0
回復(fù)
powernj
LV.6
8
2007-09-06 17:16
@雨樹淋風(fēng)
MCD2,這個(gè)程序是李學(xué)海的一個(gè)實(shí)例,在MCD2上調(diào)不通.找不到原因.
書上的程序也會有錯(cuò)誤,兄弟還是要沙里淘金,看清程序或者要逐條分析,不知我上面的帖子有什么問題,有廣告嫌疑么?我只是個(gè)PIC單片機(jī)FANS,呵呵,希望有機(jī)會探討啊.
0
回復(fù)
powernj
LV.6
9
2007-09-06 17:22
@ptan
rp0      equ  5h    ;定義狀態(tài)寄存器中的體選位      rp1      equ  5h這個(gè)上面是不是定義錯(cuò)了,應(yīng)該是rp1      equ  6h
一般在中低檔PIC中在選擇體上,我已經(jīng)不用這兩個(gè)指令了,現(xiàn)在我只用BANKSEL <寄存器>格式
0
回復(fù)
2007-09-07 08:56
@powernj
書上的程序也會有錯(cuò)誤,兄弟還是要沙里淘金,看清程序或者要逐條分析,不知我上面的帖子有什么問題,有廣告嫌疑么?我只是個(gè)PIC單片機(jī)FANS,呵呵,希望有機(jī)會探討啊.
我還在痛苦的摸索階段.還要請你多幫忙指點(diǎn)
0
回復(fù)
powernj
LV.6
11
2007-09-07 12:48
@雨樹淋風(fēng)
我還在痛苦的摸索階段.還要請你多幫忙指點(diǎn)
你這個(gè)程序?qū)?yīng)的什么片子,877A?一般書本上都喜歡這個(gè),不過程序看著一般,你能把對應(yīng)電路圖發(fā)上來看看么
用這個(gè)覆蓋你前面幾行看看
;按鍵掃描程序070831
list      p=16f877A            ; list directive to define processor
#include         ; processor specific variable definitions

__CONFIG   _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _XT_OSC  & _LVP_OFF
;********定義存器************
status   equ   3h    ;定義狀態(tài)寄存器地址
portb    equ   6h    ;定義端口B數(shù)據(jù)寄存器地址
trisb    equ   86h   ;定義端口B方向控制寄存器地址
portc    equ   7h    ;定義端口C數(shù)據(jù)寄存器地址
trisc    equ   87h    ;
rp0      equ   2h     ;定義狀態(tài)寄存器中的體選位
rp1      equ   5h
z        equ   2h      ;定義零標(biāo)志位置
fsr      equ   04h
option_reg   equ  81h   ;定義選項(xiàng)寄存器
rbup     equ   7      ;定義上拉電阻使能位位地址
data1    equ   20h    ;定義延時(shí)變量寄存器
data2    equ   21h
n2       equ   0ffh   ;定義延時(shí)常數(shù)
value    equ   22h     ;暫存按鍵列碼和位置碼
table    equ   40h    ;建在RAM中的按鍵位置碼表表頭
                          ;地址,該表由16個(gè)元素單元組成,
                          ;對應(yīng)16個(gè)鍵
0
回復(fù)
2007-09-21 16:25
@powernj
你這個(gè)程序?qū)?yīng)的什么片子,877A?一般書本上都喜歡這個(gè),不過程序看著一般,你能把對應(yīng)電路圖發(fā)上來看看么用這個(gè)覆蓋你前面幾行看看;按鍵掃描程序070831list      p=16f877A            ;listdirectivetodefineprocessor#include        ;processorspecificvariabledefinitions__CONFIG  _CP_OFF&_WDT_ON&_BODEN_ON&_PWRTE_ON&_XT_OSC  &_LVP_OFF;********定義存器************status  equ  3h    ;定義狀態(tài)寄存器地址portb    equ  6h    ;定義端口B數(shù)據(jù)寄存器地址trisb    equ  86h  ;定義端口B方向控制寄存器地址portc    equ  7h    ;定義端口C數(shù)據(jù)寄存器地址trisc    equ  87h    ;rp0      equ  2h    ;定義狀態(tài)寄存器中的體選位rp1      equ  5hz        equ  2h      ;定義零標(biāo)志位置fsr      equ  04hoption_reg  equ  81h  ;定義選項(xiàng)寄存器rbup    equ  7      ;定義上拉電阻使能位位地址data1    equ  20h    ;定義延時(shí)變量寄存器data2    equ  21hn2      equ  0ffh  ;定義延時(shí)常數(shù)value    equ  22h    ;暫存按鍵列碼和位置碼table    equ  40h    ;建在RAM中的按鍵位置碼表表頭                          ;地址,該表由16個(gè)元素單元組成,                          ;對應(yīng)16個(gè)鍵
我定義頭文件總出現(xiàn)錯(cuò)誤,郁悶
0
回復(fù)
發(fā)
主站蜘蛛池模板: 成人夜间福利 | 最新永久无码AV网址亚洲 | 色婷婷狠狠18禁久久yyy☆ | 91sex国产海角社区 | 色情久久久AV熟女人妻网站 | 日本字幕在线观看 | 亚洲影音av | 亚洲肉感在线 | 亚洲三级黄色片 | 国产午夜精品无码理论片 | 双腿被绑成M型调教PLAY照片 | 大地资源在线观看免费高清官网 | 国产三区视频 | 天天爱综合网 | 99精品毛片 | 久久久精品国产免费观看一区二区 | 日韩av高清在线 | 久久国产精品久久久 | 国产精品第二页 | 亚洲毛茸茸浓毛多水多 | 久久一二区 | 日韩色综合 | 2023国产亚洲精品色爽无码 | 在线观看免费视频一区 | 国产日韩在线 | 九一免费在线观看 | 97人妻人人做人碰人人添 | 久久伊人精品一区二区三区 | 久久网精品视频 | 国产黑丝美女av | 九七资源站总站中文字幕 | 在线不卡欧美精品一区二区三区 | 成人毛片视频在线观看 | 亚洲精品在线观看免费 | 日韩精品一区二区三区中文无码 | 日韩欧美国产系列 | 在线观看特色大片免费视频 | 开心久久网 | 国产福利在线不卡免费视频 | 在线视频观看免费视频18 | 欧美xxxx色视频在线观看 |