|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求助匯編程序 |
| 作者:wu1980 欄目:單片機(jī) |
各位大俠: 麻煩指點(diǎn)! 小弟最近在用2051寫一個(gè)程序,功能如下: P1.0~~P1.6為段碼輸出,P3.0~P3.3為掃描輸出,四個(gè)數(shù)碼管輸出,最大計(jì)數(shù)為9999,P3.5,P3.7各控制一個(gè)繼電器,如果不要顯示,基本可寫成 START:SETB P3.7 LCALL DL1S CLR P3.7 LCALL DL1S SETB P3.7 LCALL DL1S CLR P3.7 LCALL DL1MIN SETB P3.5 LCALL DL1S CLR P3.5 LCALL DL19MIN LJMP START 現(xiàn)在想加上顯示,20分鐘為一個(gè)周期,讓數(shù)碼管計(jì)數(shù),我想到用定時(shí)中斷完成顯示和P3.7,P3.5的動(dòng)作,可寫了幾次都不成功,想請教高手們幫忙,不勝感激! |
| 2樓: | >>參與討論 |
| 作者: yexrui 于 2005/5/10 18:01:00 發(fā)布:
?? |
|
| 3樓: | >>參與討論 |
| 作者: maychang 于 2005/5/10 21:01:00 發(fā)布:
寫了幾次都不成功 怎么不成功? 至少要把你寫的程序貼出來吧? |
|
| 4樓: | >>參與討論 |
| 作者: stive 于 2005/5/11 10:18:00 發(fā)布:
把程序貼出來吧 把程序貼出來吧 讓大家看看。 |
|
| 5樓: | >>參與討論 |
| 作者: zhwh45 于 2005/5/11 10:31:00 發(fā)布:
對啊 對啊,然怎么知道那里不行啊 |
|
| 6樓: | >>參與討論 |
| 作者: 59884881 于 2005/5/11 14:40:00 發(fā)布:
wu1980 把你的所有程序都貼出好了,不然哪個(gè)能幫你呢?? |
|
| 7樓: | >>參與討論 |
| 作者: stuartlh 于 2005/5/12 11:38:00 發(fā)布:
說的太不清楚了! 是什么地方不成功? 定時(shí)中斷嗎? |
|
| 8樓: | >>參與討論 |
| 作者: WU1980 于 2005/5/12 14:59:00 發(fā)布:
1121 大家好!以下為我寫的程序: ;中斷入口 ; ORG 0000H LJMP START ORG 000BH LJMP INTT0 RETI ; ;初始化 ; CLEAR: MOV 30H,#00H MOV P2,#00H MOV P3,#0FFH MOV P1,#0FFH MOV R0,#70H MOV R7,#06H CLEARDISP: MOV @R0,#00H INC R0 DJNZ R7,CLEARDISP MOV TMOD,#01H MOV TL0,#0B0H ;50MS中斷一次 MOV TH0,#3CH SETB EA SETB ET0 SETB TR0 MOV R4,#14H ;50MS X 20=1S SETB P2.7 SETB P2.5 RET ; ; ;主程序 ; START: ACALL CLEAR MAIN: LCALL DISPLAY SJMP MAIN ; ; ;T0中斷服務(wù)程序 INTT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV A,#0B7H ;中斷響應(yīng)時(shí)間同步修正 ADD A, TL0 MOV TL0,A MOV A,#3CH ADDC A, TH0 MOV TH0,A SETB TR0 DJNZ R4,OUTT0 ADDF: MOV R4,#14H INC 30H ;計(jì)數(shù)單元 MOV A,30H CJNE A,#02H,ADDRET ;2S后執(zhí)行以下動(dòng)作 CLR P2.7 CLR P2.5 CJNE A,#04H,ADDRET ;4S后執(zhí)行以下動(dòng)作 SETB P2.7 SETB P2.5 CJNE A,#06H,ADDRET;6S后執(zhí)行以下動(dòng)作 CLR P2.7 CLR P2.5 CJNE A,#60H,ADDRET;1MIN后執(zhí)行以下動(dòng)作 SETB P2.6 SETB P2.5 CJNE A,#62H,ADDRET;62S后執(zhí)行以下動(dòng)作 CLR P2.6 CLR P2.5 CJNE A,#0FFH,ADDRET ;255S后重新循環(huán)(本來是想寫19MIN鐘,不知怎么去處理) MOV 30H,#00H ;計(jì)數(shù)單元清零 &n |
|
| 9樓: | >>參與討論 |
| 作者: WU1980 于 2005/5/12 15:02:00 發(fā)布:
112 |
|
| 10樓: | >>參與討論 |
| 作者: WU1980 于 2005/5/13 10:19:00 發(fā)布:
著急 為什么沒有人理我呢?我好急啊! |
|
| 11樓: | >>參與討論 |
| 作者: 焊出個(gè)未來 于 2005/5/13 10:48:00 發(fā)布:
這種匯編看起來比有的C還舒服 |
|
| 12樓: | >>參與討論 |
| 作者: 阿南 于 2005/5/13 22:33:00 發(fā)布:
re: 20分鐘太久了吧!你可以先將定時(shí)器中斷調(diào)成功了(能再你的期望時(shí)間下正常產(chǎn)生中斷),再調(diào)個(gè)20秒的,最后再試20分鐘,否則你都要等個(gè)半死! |
|
| 13樓: | >>參與討論 |
| 作者: WU1980 于 2005/5/14 16:41:00 發(fā)布:
111 謝謝阿南,如果要在期待的中斷時(shí)間到后,置標(biāo)志位,該怎么寫呢?基本中斷是50MS可以產(chǎn)身,可1MIN,5MIN,19MIN的中斷時(shí)間該怎樣去得到呢?這是我很迷惑的,麻煩高手解答一下? |
|
| 14樓: | >>參與討論 |
| 作者: lancelotus 于 2005/5/14 21:24:00 發(fā)布:
定時(shí)類似如下試試可否? SftClk: inc 50MSec mov A, 50MSec cjne A, #20, SftClkExit mov MSec, #0 setb IsSecOn inc Sec ;...... |
|
| 15樓: | >>參與討論 |
| 作者: huxiangbin 于 2005/5/14 21:30:00 發(fā)布:
在中斷里做一把邏輯尺,量得哪個(gè)就置一個(gè)標(biāo)志 然后在主程序中查該標(biāo)志,再作相應(yīng)動(dòng)作,最后別忘清呦,否則會(huì)有麻煩的,祝你成功。 |
|
| 16樓: | >>參與討論 |
| 作者: wu1980 于 2005/5/18 16:11:00 發(fā)布:
感謝以上兩位 大俠們能否幫我再看一下﹐怎樣得到那些中斷時(shí)間﹐以下為我模仿lancelotus 寫得 程序﹕ 76H,77H,78H分別為計(jì)數(shù)單元﹐先對它們清零 。。。先產(chǎn)生50MS中斷 sftclk: inc 76h mov a,76h cjne a,#20,outt0 setb p2.7 inc 77h mov a,77h cjne a,#20,outt0 clr p2.7 inc 78h mov a,78h cjne a,#20,outt0 setb p2.5 outt0: pop psw pop acc reti 這樣執(zhí)行的結(jié)果好象不符合要求﹐比如到1MIN,5MIN,19MIN的中斷時(shí)間后分別處理三個(gè)動(dòng)作該怎樣寫呢﹖我的問題出在哪里呢﹖幫忙解答一下啊﹐謝謝了 |
|
| 17樓: | >>參與討論 |
| 作者: wu1980 于 2005/5/19 16:52:00 發(fā)布:
?? ??? |
|
| 18樓: | >>參與討論 |
| 作者: khw 于 2005/5/19 21:06:00 發(fā)布:
就是一個(gè)定時(shí)問題 定時(shí)的計(jì)數(shù)取決于你的中斷時(shí)間 eg: 一般取10ms的中斷時(shí)間,如果定時(shí)為50ms則中斷計(jì)數(shù)為5 |
|
| 19樓: | >>參與討論 |
| 作者: wu1980 于 2005/5/20 10:18:00 發(fā)布:
11 謝謝﹗一個(gè)定時(shí)沒有問題﹐可我現(xiàn)在要的是連續(xù)的幾個(gè)中斷時(shí)間﹐因?yàn)槊總(gè)中斷時(shí)間到后都會(huì)執(zhí)行一個(gè)動(dòng)作的 |
|
| 20樓: | >>參與討論 |
| 作者: wu1980 于 2005/5/20 10:35:00 發(fā)布:
111 謝謝﹗一個(gè)中斷時(shí)間沒有問題﹐可多個(gè)中斷時(shí)間時(shí)﹐就不會(huì)處理了﹐因?yàn)槊總(gè)中斷時(shí)間到后﹐就要處理相應(yīng)的動(dòng)作。 |
|
| 21樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/5/20 15:52:00 發(fā)布:
給你一個(gè)我編的asm語言的框架把,什么中斷都有了 ;+=========================================================+ ;| 8051 偽指令定義 | ;+=========================================================+ WDI EQU 097H ;定義看門狗的清除標(biāo)志 ;+=========================================================+ ;| 8051 中斷處理程序入口 | ;+=========================================================+ ORG 0000H ;程序開始 LJMP main ;跳轉(zhuǎn)主程序 ORG 0003H ;外部中斷int0的中斷入口 LJMP EI0_ISR ;跳轉(zhuǎn)定時(shí)器INT0中斷服務(wù)子程序 ORG 000BH ;定時(shí)器t0的中斷入口 LJMP T0INT ;跳轉(zhuǎn)定時(shí)器0中斷服務(wù)子程序 ORG 0013H ;外部中斷int1的中斷入口 LJMP EI1_ISR ;跳轉(zhuǎn)定時(shí)器INT1中斷服務(wù)子程序 ORG 0023H ;串口中斷入口 LJMP INTERS ;跳轉(zhuǎn)串口中斷服務(wù)子程序 ;+=========================================================+ ;| 8051 主程序 | ;+=========================================================+ ORG 100H ;主程序從地址100H開始執(zhí)行 ;+=========================================================+ ;| 8051 定時(shí)器、外部中斷、串口配置 | ;+=========================================================+ main: MOV SP,#70H ;設(shè)置堆棧,以下是單片機(jī)初始化 MOV TMOD,#21H ;設(shè)置定時(shí)器1和串行接口 MOV TL1,#0FDH ;參數(shù)9600波特率,時(shí)鐘11.0592MHZ MOV TH1,#0FDH SETB TR1 ;啟動(dòng)定時(shí)器1中斷 MOV SCON,#50H ;啟動(dòng)串口口控制寄存器 SETB ES ;啟動(dòng)串口中斷 SETB ET0 ;啟動(dòng)定時(shí)器t0中斷 CLR IT0 ;選擇外部中斷0為低電平觸發(fā) CLR IT1 ;選擇外部中斷1為低電平觸發(fā) SETB EX0 ;啟動(dòng)外部中斷0 SETB EX1 ;啟動(dòng)外部中斷1 MOV TH0,#0B1H ;設(shè)置定時(shí)器0參數(shù) MOV TL0,#0E0H CLR RS0 ;設(shè)置寄存器區(qū)基本參數(shù) CLR RS1 SETB TR0 ;啟動(dòng)定時(shí)器0中斷 SETB IP.4 ;設(shè)置中斷優(yōu)先級(jí),串口中斷為最高 CLR IP.1 ;設(shè)置定時(shí)器0優(yōu)先級(jí),低于串口中斷 SETB EA ;啟動(dòng)全部中斷 ;+=========================================================+ ;| 8051 主流程 | ;+=========================================================+ L01: CPL WDI ;對看門狗取反 SJMP L01 ;主程序流程結(jié)束 ;+=========================================================+ ;| 定時(shí)器0中斷服務(wù)子程序 | ;+=========================================================+ T0INT: CPL P1.0 ;對P1.0取反,設(shè)置定時(shí)器中斷到的標(biāo)志 ;在示波器上可以看到方波 & |
|
| 22樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/5/20 16:00:00 發(fā)布:
上面是一個(gè)完整的匯編程序,完成一些簡單的示范的功能 |
|
| 23樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/5/20 16:04:00 發(fā)布:
該程序框架的目的 該程序框架的目的 1) 將所有需要設(shè)置的功能都放在這個(gè)程序框架中,只需要將這個(gè)程序框架讀懂,51的匯編語言基本都有了;即使不懂,也可以在這個(gè)框架內(nèi)跑一些小的程序; 2) 設(shè)置各種寄存器;可以找到單片機(jī)的書籍,查閱以上各種寄存器的每個(gè)bit的含意; 3) 這個(gè)程序完成以下功能: 1. 串行接收和發(fā)送 配置串口參數(shù),工作在:9600,無校驗(yàn),8位,1個(gè)停止位,時(shí)鐘為11.0592M 其它的波特率可以參考各種51的書籍 接收一個(gè)數(shù)后,再加1,發(fā)出去,此時(shí),對某個(gè)口線取反; 2. 定時(shí)器0中斷 在定時(shí)器0中斷子程序中對某個(gè)口線取反; 可以調(diào)整定時(shí)器0的參數(shù),使得口線輸出的波形的頻率改變; 3. 外部中斷0 可以在外部中斷0的口線上接一個(gè)按鍵,按下一次,則相應(yīng)的口線上的電平變化一次; 4. 外部中斷1 可以在外部中斷0的口線上接一個(gè)按鍵,按下一次,則相應(yīng)的口線上的電平變化一次; 5. 看門狗的操作 在主程序中,對P1.7取反,輸出給看門狗的WDI(watchdog input, 看門狗輸入信號(hào)),具體看門狗是哪個(gè)口線,在偽指令上可以修改相應(yīng)的地址即可。 ________________________________________________________________ 你說的,多個(gè)中斷時(shí)間時(shí),是不是也能按照我這個(gè)程序去處理,可以試試在我的這個(gè)框架內(nèi)完成看看。 |
|
| 24樓: | >>參與討論 |
| 作者: wu1980 于 2005/5/20 16:46:00 發(fā)布:
謝謝 謝謝老樹先生﹕ 你寫的框架肯定會(huì)對我們有幫助的﹐我寫的這個(gè)程序只用了T0定時(shí)中斷﹐主要是想利用不同長短的定時(shí)時(shí)間到后完成相應(yīng)時(shí)刻的動(dòng)作﹐然后循環(huán)下去﹐前面好幾位說的道理我都懂﹐也試了多次﹐上電后沒達(dá)到目標(biāo)﹐肯定是我寫的程序有問題﹐我是不是太笨了﹐就是沒弄出來﹐一個(gè)中斷的時(shí)侯沒任何問題﹐因?yàn)槲以?jīng)成功的寫出過電子鐘程序。 |
|
| 25樓: | >>參與討論 |
| 作者: khw 于 2005/5/20 23:54:00 發(fā)布:
說得再清楚些 在一T0中斷中就可以完成所有的定時(shí)任務(wù) 如你的T0中斷設(shè)為1ms,在此中斷中設(shè)一個(gè)中斷計(jì)數(shù)標(biāo)志TimCount(初始化為0每 進(jìn)入一次中斷增1) 你的定時(shí)任務(wù)為10ms(或更長), 那么TimCount=10時(shí),定時(shí)時(shí)間到,此時(shí)再置 任務(wù)標(biāo)志,最后在主程序中查看此標(biāo)志并轉(zhuǎn)入相應(yīng)的子程序中。 |
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |