久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3112|回復: 9
打印 上一主題 下一主題
收起左側(cè)

PIC16單片機的匯編程序,看不懂,請求幫助

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:236035 發(fā)表于 2022-8-3 16:36 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
200黑幣
PIC16F的程序:
//*********************************************************************************
外部IO口中斷信號
int_rb0               movlw     d'20'            ; INT中斷開始  STB信號
                movwf     dl1
dl_200us             nop                        ; 1us
                    decfsz     dl1,F            ; 1us
                    goto     dl_200us            ; 2us
                    movfw     SIG_PORT            ; 延時200us
                    andlw     sig_mask_def
                    movwf     sig_buffer               
                    movlw     d'130'
                movwf     dl1
dl_400us             nop                        ; 1us
                    decfsz     dl1,F            ; 1us
                    goto     dl_400us            ; 2us,延時400us,實際約520us
                    btfss     PORTB,0            ; int=1有信號
                    goto     sig_err_1            ; 600us后未有信號轉(zhuǎn)錯誤   
is_bal            movfw     sig_buffer
                    xorlw     bal_equ_def        ; 是否為bal信號
                btfss     STATUS,Z
                goto     is_up            ; 轉(zhuǎn)up   
balance            movlw     H'01'            ; pb=00000001
                movwf     signal_now
                goto     sig_normal

is_up                movfw     sig_buffer        ; is up
                xorlw     up_equ_def
                btfss     STATUS,Z
                goto     is_down
up                movlw     H'05'            ; pb=00000101
                movwf     signal_now
                goto     sig_normal

is_down            movfw     sig_buffer        ; is down
                xorlw     down_equ_def
                btfss     STATUS,Z
                goto     sig_err_1
down                movlw     h'03'            ; pb=00000011
                movwf     signal_now
                goto     sig_normal               
sig_err_1
                bcf         tasklist, fstbuzz_f        ; invalid signal
                    ;clrf     t_rpm_last
               
sig_normal            movfw     t_rpm_laser            
                    sublw     tsig_fstbuzz_def-1
                    btfss     STATUS,C
                    goto     int_rb0_1                ; (tsig_fstbuzz_def-1) 直接處理                                            
                    incf     gr_counter,F            ; =,gr不能超過兩次,解決反射光
                  movfw     gr_counter
                  sublw     D'1'
                  btfss     STATUS,C
                  goto     int_rb0_1                ;gr_counter1  兩次以上(含兩次)要處理
                  goto     int_rb0_end            ;gr_counter=1 以第二次為準

int_rb0_1
                    movfw     sig_buffer                ;110406
                xorlw     sig_mask_def
                btfsc     STATUS,Z
                goto     invalid_rpm            ; 相等
               
                    movfw     t_rpm_last
                    sublw     t_rpm_laser_max_def
                btfsc     STATUS,C
                goto     invalid_rpm            ; t_rpm_last= t_rpm_laser_max_def, invalid rpm

                    movfw     t_rpm_laser
                sublw     t_rpm_laser_max_def      ; t_rpm_laser_max_def - t_rpm_laser
                btfsc     STATUS,C
                goto     invalid_rpm            ; = t_rpm_laser_max_def, invalid rpm
               
                    ;movfw     t_rpm_laser              ; 最終速度慢
                    ;sublw    t_rpm_laser_min_def
                    ;btfss     STATUS,C
                    ;goto     invalid_rpm
int_rb0_2               
                bsf         tasklist,fstbuzz_f     ;  t_rpm_laser_max_def,  valid rpm
valid_rpm            
                movlw     t_1minute_def            ; 有信號,重置十分鐘自動關(guān)機
                movwf     t_1minute
                movlw     t_10minute_def
                movwf     t_10minute
                clrf     sig_counter
                    goto     reset_t_rpm

invalid_rpm        bcf         tasklist, fstbuzz_f
                goto     reset_t_rpm
reset_t_rpm        
                    movfw     t_rpm_laser
                    movwf     t_rpm_last
                clrf     t_rpm_laser        
                clrf     gr_counter        ; 清干擾計數(shù)
   
int_rb0_end        bcf         INTCON,INTF        ; 關(guān)中斷
                goto     int_end


//*************************************************************************
下面還有一段,是中斷信號接收后的處理
ml_sig            
                    movfw     t_rpm_laser
                    xorlw     tsig_fstbuzz_def            ;first buzzerring delay
                    btfss     STATUS,Z
                    goto     ml_isgr0

                btfss     tasklist,fstbuzz_f
                   goto     ml_isgr0
               
                    ;movfw     t_rpm_laser
                    ;xorlw     D'1'
                    ;btfsc     STATUS,Z
                    ;goto     rpm_laser_1
                    ;movfw     t_rpm_laser
                    ;xorlw     D'5'
                    ;btfsc     STATUS,Z
                    ;goto     rpm_laser_5
                    ;movfw     t_rpm_laser
                    ;xorlw     D'7'
                    ;btfsc     STATUS,Z
                    ;goto     rpm_laser_7
               

                    ;movfw     sig_buffer1
                    ;xorwf     sig_buffer,W                ;0 5相反
                    ;btfss     STATUS,Z
                    ;goto     ml_isgr0
                    ;movlw     sig_mask_def
                    ;xorwf     sig_buffer5,F
                    ;movfw     sig_buffer5
                    ;xorwf     sig_buffer,W
                    ;btfss     STATUS,Z
                    ;goto    ml_isgr0
               
                    ;movlw     t_1minute_def
                ;movwf     t_1minute
                ;movlw     t_10minute_def
                ;movwf     t_10minute
                ;clrf     sig_counter
               
                    call     sig_roll
                    call     get_signal
            
sig01               movfw     signal_now            ;取得當前信號
                    xorlw     H'01'                ;是bal?
                    btfss     STATUS,Z
                    goto     sig01_end                ;不是bal轉(zhuǎn)down
                    m_lcdup_off                    
                        m_lcddown_off
                    m_lcdbal_on            
                    clrf     tsig_bal
sig01_1            btfsc     key_st,nobuzz_f
                goto     sig01_end
                movfw     buzz_mode
                    andlw     h'07'
                    xorlw     buzz_mode_bal_def
                    btfsc     STATUS,Z
                    goto     sig01_end
sig01_2                movlw     buzz_mode_bal_def
                        movwf     buzz_mode
sig01_end            goto     sig03
               
sig03                movfw     signal_now            ;當前信號
                        xorlw     h'03'                ;是down?
                        btfss     STATUS,Z            
                        goto     sig03_end                ;不是down轉(zhuǎn)up

                ;btfss    up1_dn1,dn1            ;20151013        
                ;goto    sig03_3                ;20151013
                       m_lcdup_off                    
                        m_lcdbal_off
                        ;m_lcddown1_on                    ;20151013
                  ;goto     sig03_1                ;20151013

sig03_3             ;m_lcdup_off                    ;20151013
                        ;m_lcdbal_off                    ;20151013
                  m_lcddown_on                    

                        clrf     tsig_down
sig03_1                btfsc     key_st,nobuzz_f
                    goto     sig03_end
                    movfw     buzz_mode
                    andlw     h'07'
                    xorlw     buzz_mode_down_def
                    btfsc     STATUS,Z
                   goto     sig03_end
sig03_2                movlw     buzz_mode_down_def
                        movwf     buzz_mode
sig03_end            goto     sig05               
               
sig05                movfw     signal_now            ;當前信號
                        xorlw     h'05'                ;是up?
                        btfss     STATUS,Z
                        goto     sig05_end
               
                ;btfss    up1_dn1,up1        ;20151013
                ;goto    sig05_3            ;20151013
                        m_lcddown_off                    ;Ver2.2
                        m_lcdbal_off
                        ;m_lcdup1_on                ;20151013
                ;goto    sig05_1            ;20151013
sig05_3            ;m_lcddown_off                ;20151013
                ;m_lcdbal_off                ;20151013
                m_lcdup_on               

                        clrf     tsig_up
sig05_1                btfsc     key_st,nobuzz_f
                    goto     sig05_end
                    movfw     buzz_mode
                    andlw     h'07'
                    xorlw     buzz_mode_up_def
                    btfsc     STATUS,Z
                    goto     sig05_end
sig05_2                movlw     buzz_mode_up_def
                        movwf     buzz_mode
sig05_end        
                movfw     signal_now
                movwf     signal_st
                goto     ml_isgr0        

//*****************************************************************
以上兩段程序望能幫助解釋

如有必要,也可上傳全部程序。

最佳答案

查看完整內(nèi)容

8051的匯編用的人都少 PIC的匯編就更加少了 你要解釋什么?指令在PIC單片機的數(shù)據(jù)手冊中有說明的,自己去把指令的含義放在后面就是解釋了PIC的匯編不好理解,沒有用過的人,基本是看不明白的 如果你是用PIC匯編的,那就應該能看明白 如果你不是用PIC匯編的,那看PIC匯編也沒什么意義
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:401564 發(fā)表于 2022-8-3 16:36 | 只看該作者
8051的匯編用的人都少
PIC的匯編就更加少了
你要解釋什么?指令在PIC單片機的數(shù)據(jù)手冊中有說明的,自己去把指令的含義放在后面就是解釋了PIC的匯編不好理解,沒有用過的人,基本是看不明白的
如果你是用PIC匯編的,那就應該能看明白
如果你不是用PIC匯編的,那看PIC匯編也沒什么意義



回復

使用道具 舉報

板凳
ID:236035 發(fā)表于 2022-8-4 07:56 | 只看該作者
Y_G_G 發(fā)表于 2022-8-3 17:17
8051的匯編用的人都少
PIC的匯編就更加少了
你要解釋什么?指令在PIC單片機的數(shù)據(jù)手冊中有說明的,自己去把 ...

感謝回復。我沒用過PIC 匯編,但51的匯編搞過。這程序是公司的老產(chǎn)品,我看了前面幾行,就是延時和信號IO口的讀取。如果后面也這么簡單,那問題就不大,但要全部讀通,估計還是有難度。所以希望有搞過的人幫助解惑。
如果沒有其它有價值的回復,黑幣就給你了。
回復

使用道具 舉報

地板
ID:584814 發(fā)表于 2022-8-4 09:12 | 只看該作者
一般判斷,能講清楚的不太可能混在壇子里細講
建議自己學自己理解。對照說明書如果不能理解,就算是細講又如何 ?

評分

參與人數(shù) 1黑幣 +15 收起 理由
ly1972001 + 15 贊一個!

查看全部評分

回復

使用道具 舉報

5#
ID:236035 發(fā)表于 2022-8-4 10:16 | 只看該作者
man1234567 發(fā)表于 2022-8-4 09:12
一般判斷,能講清楚的不太可能混在壇子里細講
建議自己學自己理解。對照說明書如果不能理解,就算 ...

哎,是的。自己硬啃也不是不行,上一段快看完了,感覺還行。要不是公司催著搞下一個項目,也不會這么急迫。其實也就幾十條指令,常用的也就是那幾個。感謝回復!
回復

使用道具 舉報

6#
ID:401564 發(fā)表于 2022-8-4 19:54 | 只看該作者
ly1972001 發(fā)表于 2022-8-4 07:56
感謝回復。我沒用過PIC 匯編,但51的匯編搞過。這程序是公司的老產(chǎn)品,我看了前面幾行,就是延時和信號IO ...

黑幣?我應該不缺的,我缺是另外一種幣
PIC的匯編很難啃,如果你學過匯編,那至少也得一個星期才能真正的適應PIC的匯編
16F系列每個不同型號單片機有著不同的匯編指令,或多或少的
你要看你用的那個型號的指令集
而且,PIC16F指令要注意BANK操作,同一個地址,BANK不同,對應的寄存器也不同
回復

使用道具 舉報

7#
ID:236035 發(fā)表于 2022-8-5 11:23 | 只看該作者
Y_G_G 發(fā)表于 2022-8-4 19:54
黑幣?我應該不缺的,我缺是另外一種幣
PIC的匯編很難啃,如果你學過匯編,那至少也得一個星期才能真正的適 ...

剛剛我已經(jīng)把這兩段程序看通了,花了寶貴的兩天時間,然后就是按邏輯用C寫進新的MCU,第一段已經(jīng)驗證成功了。
我對公司產(chǎn)品已經(jīng)有些理解了,且用過51匯編,所以讀PIC的匯編還算順利。而且不是要讀懂所有的程序,只要知道關(guān)鍵程序的邏輯就可以了。如果驗證不成功,只能等有時間了再用仿真器仿真它。
感謝所有回復我的人!感謝論壇!
此貼已失效。
回復

使用道具 舉報

8#
ID:123289 發(fā)表于 2022-8-5 14:19 | 只看該作者
這是你學習單片機的絕好機會!
對照PIC的指令系統(tǒng),一一逐解,解完了,你的單片機(不僅僅是PIC,其理是相通的)水平絕對會有一個極大的提升!!!
我的話是真的,不信可以與我打個賭。
回復

使用道具 舉報

9#
ID:236035 發(fā)表于 2022-8-8 08:22 | 只看該作者
yzwzfyz 發(fā)表于 2022-8-5 14:19
這是你學習單片機的絕好機會!
對照PIC的指令系統(tǒng),一一逐解,解完了,你的單片機(不僅僅是PIC,其理是相 ...

學習倒是談不上,畢竟搞了20年的單片機。想起以前第一次搞單片機,也是把51匯編改成C語言,感慨良多!
關(guān)鍵還是在于一句一句搞懂指令的意思,再綜合起來看設計思路。急不得。
回復

使用道具 舉報

10#
ID:1034262 發(fā)表于 2022-8-8 17:48 | 只看該作者
雖然快20年沒用過PIC的匯編了,但是我還是熟悉的,畢竟只有35條指令。
不過我沒有空去看,樓主對應一條條指令加解釋,一段段程序研讀,花即天時間沒問題的,這種MCU才30多條指令,邏輯超級簡單。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品一区二区三区四区 | 97国产精品视频人人做人人爱 | 亚洲视频在线观看 | 日韩三区 | 欧美日本韩国一区二区 | 国产大片一区 | 国产视频日韩 | 免费在线看黄视频 | 亚洲国产精品成人无久久精品 | 在线观看深夜视频 | 久久精品高清视频 | 欧美日韩在线观看一区 | 亚洲自拍偷拍av | 日韩毛片免费看 | 日本五月婷婷 | 91在线看网站 | 国产成人免费视频网站视频社区 | av免费网址 | 在线播放一区二区三区 | 色www精品视频在线观看 | 久久精品视频一区二区三区 | 久久久精品一区二区 | 国产三级日本三级 | 欧美a∨ | 日韩三级精品 | 一区二区三区四区国产 | 欧美久久久电影 | 一级黄在线观看 | 狠狠干五月天 | 成人在线观看中文字幕 | 国产精品久久久久影院色老大 | 视频二区在线观看 | 91精品国产91综合久久蜜臀 | 国产婷婷在线视频 | 国产精品久久久久久久久大全 | 久久88| 国产一级电影网 | 91久久北条麻妃一区二区三区 | 国产一区不卡 | 我要看免费一级毛片 | 久久这里只有精品首页 |