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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3328|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

一個(gè)初學(xué)者請(qǐng)教老師傅這個(gè)PIC單片機(jī)程序?yàn)槭裁床贿\(yùn)行?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:248656 發(fā)表于 2019-3-23 18:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
tmr0 equ 01h                   ;定義TMR0定時(shí)器/計(jì)數(shù)器的地址
status equ 03h                 ;定義狀態(tài)寄存器地址
portd equ 08h                  ;定義端口D的寄存器的地址
trisd equ 88h                  ;定義端口D的方向控制寄存器的地址
option_reg equ 81h             ;定義選項(xiàng)寄存器的地址
intcon equ 0bh                 ;定義一個(gè)中斷端控制寄存器的地址
c equ 0                        ;定義狀態(tài)寄存器進(jìn)位標(biāo)志C的指示位
rp0 equ 5h                     ;定義狀態(tài)寄存器頁(yè)選位的指示位
w equ 0                        ;定義傳送目標(biāo)寄存器為W的指示位
f equ 1                        ;定義傳送目標(biāo)寄存器為F的指示位
z equ 2                        ;定義狀態(tài)寄存器零標(biāo)志Z的指示位
t0if equ 2                     ;定義TMR0的溢出標(biāo)志位
t0ie equ 5                     ;定義TMR0的使能標(biāo)志位
flag equ 24h                   ;定義一個(gè)亮滅標(biāo)志位
flag2 equ 25h                  ;定義一個(gè)左右移標(biāo)志
m equ 8                        ;定義一個(gè)常數(shù)寄存器
dly1 equ 20h                   ;定義一個(gè)延時(shí)變量寄存器
dly2 equ 21h                   ;定義另一個(gè)延時(shí)變量寄存器
portd_b equ 23h                ;定義一個(gè)顯示緩沖區(qū)
w_temp equ 7fh                 ;定義一個(gè)W備份寄存器
tmr0_d equ 0                   ;定義TMR0的初始值
;--------------------------------- 付復(fù)位向量------------------------
org 000h                       ;定義程序存放區(qū)域的起始位置
nop                            ;設(shè)置一條ICD必須的空操作指令
goto main                      ;
;----------------------------中斷向量和中斷服務(wù)子程序----------------
org 004h                       ;
tmr0serv                        ;中斷服務(wù)子程序名稱
movwf w_temp                   ;復(fù)制W倒塌的臨時(shí)備份寄存器W_TEMP中
bcf intcon,t0if                ;清除TMR0溢出中斷標(biāo)志位
incf flag,f                    ;亮滅標(biāo)志位(寄存器末位)翻轉(zhuǎn)
btfss flag,0                   ;標(biāo)志位=1?是!跳一步到“熄滅”
goto jump0                     ;否,跳到“點(diǎn)亮”
clrf portd                     ;熄滅
goto jump1                     ;跳過(guò)下面的程序
jump0                           ;
movf portd_b                   ;點(diǎn)亮,即將緩沖區(qū)內(nèi)容先傳入W
movwf portd                    ;再由W轉(zhuǎn)入端口寄存器,送顯
jump1                           ;
movlw tmr0_d                   ;TMR0賦初值
movwf tmr0                     ;并(重新)啟動(dòng)定時(shí)器
movf w_temp,w                  ;恢復(fù)現(xiàn)場(chǎng)
retfie                         ;中斷返回
;----------------------------------主程序----------------------------
main
bsf status,rp0                 ;選擇文件寄存器的體1
movlw 00h                      ;將端口D的方向控制碼00H先送W
movwf trisd                    ;端口D得方向控制寄存器,設(shè)定為輸出
movlw 07h                      ;將選項(xiàng)寄存器的控制碼07H先送W
movwf option_reg               ;設(shè)定分頻比1:256
bcf status,rp0                 ;恢復(fù)狀態(tài)寄存器的體0
movlw 0a0h                     ;將中斷控制寄存器的控制碼A0H先送W
movwf intcon                   ;開(kāi)放全局中斷和TMR0中斷
bcf intcon,t0if                ;清除TMR0溢出中斷標(biāo)志位
movlw tmr0_d                   ;TMR0賦初值
movwf tmr0                     ;啟動(dòng)定時(shí)器
movlw 0feh                     ;顯示驅(qū)動(dòng)碼送入W
movwf portd_b                  ;顯示驅(qū)動(dòng)碼送顯示緩沖寄存器
bsf status,c                   ;   
l1
movlw 01h                      ;
xorwf flag2,f                  ;      
btfss flag2,0                  ;判斷左右移標(biāo)志=1,左移
goto loop                      ;右移
goto loop1                     ;左移
loop
movlw 0ah
movwf m
m1
decfsz m,f
goto c1
goto m2
c1
rrf portd_b
goto m1
m2                   ;帶進(jìn)位標(biāo)志位循環(huán)右移緩沖區(qū)寄存器
goto l1                        ;跳轉(zhuǎn)到L1
loop1
movlw 9
movwf m
s2
decfsz m,f
goto k1
goto k2
k1  
rlf portd_b
goto s2
k2                    ;帶進(jìn)位標(biāo)志位循環(huán)左移緩沖區(qū)寄存器
goto l1                        ;跳轉(zhuǎn)到L1                           
;-----------------------延時(shí)子程序-----------------------------
delay
movlw 0ffh                     ;將外層循環(huán)變量值送W
movwf dly1                     ;送入用作外循環(huán)變量的DLY1
lp0
movlw 0ffh                     ;將內(nèi)層循環(huán)變量值送W
movwf dly2                     ;送入用作內(nèi)循環(huán)變量的DLY2
lp1
decfsz dly2,f                  ;內(nèi)層變量DLY2內(nèi)容遞減,若為0跳躍
goto lp1                       ;跳轉(zhuǎn)到LP1
decfsz dly1,f                  ;外層變量DLY1內(nèi)容遞減,若為0跳躍
goto lp0                       ;跳躍LP0
return                         ;返回主程序
end                            ;

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:401564 發(fā)表于 2019-3-24 04:48 | 只看該作者
什么叫不運(yùn)行呢?你從哪里看出來(lái)不運(yùn)行了?
你的程序估計(jì)沒(méi)幾個(gè)看得明白,PIC沒(méi)有像8051那樣明顯的標(biāo)號(hào),你就應(yīng)該搞什么虛線之類的分開(kāi),好讓人找到GOTO指令跳轉(zhuǎn)到哪里了
估計(jì)你這是仿真的吧
代碼的開(kāi)頭沒(méi)有配置單片機(jī)的晶振,復(fù)位電壓之類的
像這樣:#include <p16f877a.inc>        ;包含了PIC16F877A的寄存器聲稱文件
    __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
回復(fù)

使用道具 舉報(bào)

板凳
ID:248656 發(fā)表于 2019-3-24 07:47 | 只看該作者
我將程序燒到板子上,我設(shè)計(jì)的是流水燈,但是出來(lái)的結(jié)果是8個(gè)燈全亮常亮
回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2019-3-24 08:04 | 只看該作者
除了時(shí)鐘被關(guān)閉之外,單片機(jī)就沒(méi)有不運(yùn)行時(shí)候!
回復(fù)

使用道具 舉報(bào)

5#
ID:248656 發(fā)表于 2019-3-28 17:32 | 只看該作者
配置位設(shè)置
FOSC=HS OSCILLATOR
WDTE=DISABLE
PWRTE=DISABLE
BORETN=DISABLE
LVP=HV ON MCLR MUST BE USED
CPD=OFF
WRT=OFF
CP=OFF
回復(fù)

使用道具 舉報(bào)

6#
ID:401564 發(fā)表于 2019-3-28 19:24 | 只看該作者
asd-123 發(fā)表于 2019-3-28 17:32
配置位設(shè)置
FOSC=HS OSCILLATOR
WDTE=DISABLE

配置位應(yīng)該是在代碼里面的,而且還得開(kāi)關(guān)就是的,我用過(guò)PIC16F877A,就是這樣的
回復(fù)

使用道具 舉報(bào)

7#
ID:248656 發(fā)表于 2019-3-29 18:15 | 只看該作者
匯編語(yǔ)言能夠設(shè)置配置位嗎?在程序里如何編寫(xiě)?
回復(fù)

使用道具 舉報(bào)

8#
ID:248656 發(fā)表于 2019-3-29 18:42 | 只看該作者
tmr0 equ 01h                ;定義定時(shí)器和計(jì)數(shù)器0寄存器地址
pcl equ 02h                 ;定義程序計(jì)數(shù)器低字節(jié)寄存器地址
status equ 03h              ;定義狀態(tài)寄存器地址
option_reg equ 81h          ;定義選項(xiàng)寄存器地址
intcon equ 0bh              ;定義中斷寄存器地址
portd equ 08h               ;定義端口D的數(shù)據(jù)寄存器的地址
trisd equ 88h               ;定義端口D的方向控制寄存器地址
dly equ 20h                 ;定義一個(gè)外循環(huán)延時(shí)變量
dly1 equ 21h                ;定義一個(gè)內(nèi)循環(huán)變量延時(shí)變量
flag1 equ 22h               ;定義一個(gè)左右移標(biāo)志
flag2 equ 23h               ;定義一個(gè)亮滅標(biāo)志
w_temp equ 24h              ;定義一個(gè)臨時(shí)備份寄存器
portd_b equ 25h             ;定義一個(gè)顯示緩沖區(qū)寄存器
m equ 26h                   ;定義一個(gè)計(jì)數(shù)器變量
w equ 0                     ;定義傳送目標(biāo)寄存器為W的指示位
f equ 1                     ;定義傳輸目標(biāo)寄存器為RAM的指示位
tmr0_b equ 0                ;定數(shù)器初始值
rp0 equ 5                   ;在狀態(tài)寄存器中的頁(yè)選位0
t0if equ 2                  ;定義TMR0的中斷標(biāo)志位
;-------------------------------復(fù)位向量-------------------------------------
org 000h                   ;設(shè)置復(fù)位矢量
nop                        ;放置一條ICD必須的空操作
goto main                  ;跳轉(zhuǎn)到主程序
;-----------------------中斷向量和中斷服務(wù)程序-------------------------------
org 004h                  ;
tmr0serv                    ;中斷服務(wù)子程序
movwf w_temp               ;復(fù)制W到他的臨時(shí)備份寄存器W—temp中
bcf intcon,t0if            ;清除TMR0溢出中斷標(biāo)志位
incf flag2,f               ;亮滅標(biāo)志位(寄存器)反轉(zhuǎn)
btfss flag2,0               ;標(biāo)志位=1?是!跳一步到熄滅“
goto jump                  ;否!跳到”點(diǎn)亮“
goto jump1                 ;熄滅
;----------------------------熄滅-------------------------------------------
jump                        ;
movlw portd_b              ;點(diǎn)亮,即將緩沖區(qū)先送入W
movwf portd                ;再由W轉(zhuǎn)入端口D寄存器,送顯
;-----------------------------點(diǎn)亮----------------------------------------------
jump1                       ;
movlw 0ffh                 ;將立即數(shù)0FFH先送到W
movlw portd                ;熄滅
movlw tmr0_b               ;TMR0賦初值
movwf tmr0                 ;啟動(dòng)定時(shí)器
movf w_temp,w              ;恢復(fù)現(xiàn)場(chǎng)
retfie                     ;中斷返回
;-------------------------------主程序---------------------------------------
main                        
bcf status,rp0             ;設(shè)置文件寄存器的體1
movlw 00h                  ;將端口D的方向控制碼00H先送到W
movwf trisd                ;轉(zhuǎn)送到方向寄存器,端口D設(shè)為輸出
movlw 07h                  ;設(shè)定選項(xiàng)寄存器內(nèi)容,分頻器給TMR0
movwf option_reg           ;分頻比為1:256
bcf status,rp0             ;恢復(fù)狀態(tài)寄存器的體0
movlw 0a0h                 ;將中端控制碼先送W
movwf intcon               ;開(kāi)放全局中斷和定時(shí)器0中斷
bcf intcon,t0if            ;清除TMR0溢出中斷標(biāo)志位
movlw tmr0_b               ;TMR0賦初值
movwf tmr0                 ;啟動(dòng)TMR0定時(shí)計(jì)數(shù)器
movlw 0feh                 ;將驅(qū)動(dòng)碼送入W
movwf portd_b              ;將驅(qū)動(dòng)碼送入顯示緩沖區(qū)
call delay                 ;延時(shí)子程序
clrf flag1                 ;清零標(biāo)志位
;-----------------------------------------------------------------------------
l1
movlw 01h                  ;將立即數(shù)01H先送W
xorwf flag1,f              ;和FLAG2相或,標(biāo)志位取反
btfss flag1,0              ;測(cè)試標(biāo)志位=1,是跳到左移。否!跳到右移
goto loop                  ;否!右移
goto loop1                 ;是!跳到左移
;---------------------------右移子程序-----------------------------------------
loop
movlw 09                   ;將計(jì)數(shù)初值送W
movwf m                    ;再轉(zhuǎn)送到M
;------------------------------------------------------------------------------
m1
decfsz m,f                 ;計(jì)數(shù)器減一,為0,跳一步。不為0,右移
goto c1                    ;跳到C1(右移)
goto c2                    ;計(jì)數(shù)器為0返回,循環(huán)檢測(cè)
;----------------------------------右移-------------------------------------------
c1
rrf portd_b,f                ;帶進(jìn)位循環(huán)右移指令
goto m1                    ;返回計(jì)數(shù)器
;----------------------------------返回計(jì)數(shù)器--------------------------------------------
c2
goto l1                    ;返回檢測(cè)左右移標(biāo)志位
;----------------------------左移子程序----------------------------------------
loop1
movlw 9                    ;將計(jì)數(shù)器初值先送W
movwf m                    ;轉(zhuǎn)送到M
;------------------------------------------------------------------------------
s2
decfsz m,f                 ;計(jì)數(shù)器減一,為0,跳一步,否,順序執(zhí)行
goto k1                    ;跳到左移
goto k2                    ;計(jì)數(shù)器為0返回,循環(huán)檢測(cè)
;------------------------------------------------------------------------------
k1
rlf portd_b,f                ;帶進(jìn)位循環(huán)左移
goto s2                    ;返回計(jì)數(shù)器
;------------------------------------------------------------------------------
k2
goto l1                    ;跳回檢測(cè)左右移標(biāo)志
;-----------------------------延時(shí)子程序----------------------------------------
delay
movlw 0ffh                 ;將外層循環(huán)參數(shù)0FF先送W
movwf dly                  ;再轉(zhuǎn)送到DLY
;-------------------------------------------------------------------------------
lp0
movlw 0ffh                 ;將內(nèi)層循環(huán)參數(shù)0FFH先送W
movwf dly1                 ;再轉(zhuǎn)送到DLY1
;-------------------------------------------------------------------------------
lp1
decfsz dly1,f              ;內(nèi)層循環(huán)參數(shù)DLY1自減一,若為0,跳一步
goto lp1                   ;返回循環(huán)自減LP1
decf dly,f                 ;外層循環(huán)參數(shù)DLY自減一,若為0,跳一步
goto lp0                   ;跳回循環(huán)自減LP0
return                     ;返回主程序
end                        ;源程序結(jié)束
我從寫(xiě)了一下
配置位設(shè)置
FOSC=HS OSCILLATOR
WDTE=DISABLE
PWRTE=DISABLE
BORETN=DISABLE
LVP=HV ON MCLR MUST BE USED
CPD=OFF
WRT=OFF
CP=OFF
機(jī)子就是不運(yùn)行,怎么回事?????????
回復(fù)

使用道具 舉報(bào)

9#
ID:342822 發(fā)表于 2019-3-29 19:13 | 只看該作者
沒(méi)問(wèn)題~pic16f577可以運(yùn)行。
回復(fù)

使用道具 舉報(bào)

10#
ID:342822 發(fā)表于 2019-3-29 19:27 | 只看該作者
仿真可以運(yùn)行

捕獲.PNG (46.81 KB, 下載次數(shù): 71)

捕獲.PNG
回復(fù)

使用道具 舉報(bào)

11#
ID:401564 發(fā)表于 2019-3-29 22:04 | 只看該作者
asd-123 發(fā)表于 2019-3-29 18:42
tmr0 equ 01h                ;定義定時(shí)器和計(jì)數(shù)器0寄存器地址
pcl equ 02h                 ;定義程序計(jì) ...

在代碼的第一行呀!注釋不算,配置位在所有代碼的前面
但我不知道你用的是什么版本的IDE,我用mplab x ide就是這樣子的,在配置位設(shè)定那設(shè)定好配置位,然后再生成代碼,再粘貼到代碼的開(kāi)始
這是一個(gè)我用PIC16F877A寫(xiě)的一個(gè)ADC程序,已經(jīng)在開(kāi)發(fā)板上驗(yàn)證成功過(guò)的了 PIC16F877A_ADC.rar (1.77 KB, 下載次數(shù): 10)
用PICKIT直接下載就可以運(yùn)行看到效果了
你可以參考一下
回復(fù)

使用道具 舉報(bào)

12#
ID:248656 發(fā)表于 2019-3-30 07:35 | 只看該作者
我也是頭一個(gè)遇到,試了好幾遍,不行我用的芯片PIC877A
回復(fù)

使用道具 舉報(bào)

13#
ID:401564 發(fā)表于 2019-3-30 11:44 | 只看該作者
asd-123 發(fā)表于 2019-3-30 07:35
我也是頭一個(gè)遇到,試了好幾遍,不行我用的芯片PIC877A

你試了我給你的程序沒(méi)有?
不要仿真,要在實(shí)際的PCB板上運(yùn)行的,不一定要完全的接上顯示,至少是輸出和ADC端口隨便接一下,也不一定要數(shù)碼管,LED接上幾個(gè)也行,只要是能確定程序已經(jīng)在運(yùn)行就可以了
你用的IC和我用的是一樣的,代碼是可以兼容的
回復(fù)

使用道具 舉報(bào)

14#
ID:248656 發(fā)表于 2019-4-7 20:30 | 只看該作者
老師,我試了。謝謝,能多給接例子好讓我學(xué)習(xí)進(jìn)步老師能把電話給我嗎?我要多請(qǐng)教
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人一区在线 | 久久国产精品免费一区二区三区 | 国产精品视频一 | 欧美视频偷拍 | 午夜丁香视频在线观看 | 欧美日韩在线精品 | 欧美日韩精品一区 | 国产激情片在线观看 | 日韩精品福利 | 一级久久久久久 | cao在线| 久久国产一区二区三区 | 午夜精品福利视频 | 在线看av的网址 | 欧美精品乱码久久久久久按摩 | 给我免费的视频在线观看 | 久久最新 | 91精品国产美女在线观看 | 国产ts人妖另类 | 99久久免费精品国产免费高清 | 欧美成人在线免费 | 91久久国产精品 | 91人人视频在线观看 | av天天干| 日本精品视频一区二区 | 国产美女在线精品免费 | 成人av免费在线观看 | 综合色站导航 | 天天av天天好逼 | 黄色网址在线免费观看 | 日韩在线综合网 | 久久精品色欧美aⅴ一区二区 | 国产精品日韩欧美一区二区三区 | 国产激情视频在线观看 | 亚洲精品成人免费 | 久久久免费观看视频 | 我想看一级黄色毛片 | 91新视频| 国内精品免费久久久久软件老师 | 欧美一区在线看 | 欧美福利专区 |