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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3074|回復(fù): 9
收起左側(cè)

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

[復(fù)制鏈接]
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 以第二次為準(zhǔn)

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            ;取得當(dāng)前信號
                    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            ;當(dāng)前信號
                        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            ;當(dāng)前信號
                        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匯編的,那就應(yīng)該能看明白 如果你不是用PIC匯編的,那看PIC匯編也沒什么意義
回復(fù)

使用道具 舉報

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


回復(fù)

使用道具 舉報

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

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

使用道具 舉報

ID:584814 發(fā)表于 2022-8-4 09:12 | 顯示全部樓層
一般判斷,能講清楚的不太可能混在壇子里細(xì)講
建議自己學(xué)自己理解。對照說明書如果不能理解,就算是細(xì)講又如何 ?

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:236035 發(fā)表于 2022-8-4 10:16 | 顯示全部樓層
man1234567 發(fā)表于 2022-8-4 09:12
一般判斷,能講清楚的不太可能混在壇子里細(xì)講
建議自己學(xué)自己理解。對照說明書如果不能理解,就算 ...

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

使用道具 舉報

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

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

使用道具 舉報

ID:236035 發(fā)表于 2022-8-5 11:23 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-8-4 19:54
黑幣?我應(yīng)該不缺的,我缺是另外一種幣
PIC的匯編很難啃,如果你學(xué)過匯編,那至少也得一個星期才能真正的適 ...

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

使用道具 舉報

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

使用道具 舉報

ID:236035 發(fā)表于 2022-8-8 08:22 | 顯示全部樓層
yzwzfyz 發(fā)表于 2022-8-5 14:19
這是你學(xué)習(xí)單片機的絕好機會!
對照PIC的指令系統(tǒng),一一逐解,解完了,你的單片機(不僅僅是PIC,其理是相 ...

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品片| 一区二区三区四区不卡 | 欧美一区二区三区精品 | 久久国内精品 | 久久久久久免费毛片精品 | 亚洲视频三区 | 人人干天天干 | 天天干在线播放 | av在线一区二区三区 | 欧美日韩视频网站 | 91精品国产91久久久久久密臀 | 亚洲 中文 欧美 日韩 在线观看 | 欧美日韩亚洲在线 | 日本欧美国产在线 | avhd101在线成人播放 | 日韩中文字幕在线视频 | h视频在线免费 | 91精品国产乱码久久久久久久 | 中文字幕视频在线看 | 国产成人一区二区三区久久久 | 在线观看免费毛片 | 伊人伊成久久人综合网站 | 国产99久久精品一区二区永久免费 | 免费视频一区二区 | 国产精品不卡 | 国产精品一区一区 | 日韩精品一区二区三区中文在线 | 欧美中文在线 | 精品欧美激情在线观看 | 中文久久 | 国产精品欧美一区喷水 | 俺去俺来也www色官网cms | 久久久精品视频免费 | 色综合色综合 | 国产精品视频免费观看 | 久久亚洲综合 | 国产精品免费一区二区三区四区 | 夜夜精品视频 | 国产一区2区 | 日本三级全黄三级三级三级口周 | 日韩一区二区三区在线 |