91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

請教在單片機中如何看CPU的資源

因為在看書的時候,看到了這樣一句話【單片機的案件處理子程序應該盡可能少占用CPU的運行時間,并且盡可能將鍵盤掃描安排在程序空余的時間,以滿足實時準確響應按鍵請求的目的】

大家怎么看?

全部回復(30)
正序查看
倒序查看
daylight
LV.4
2
2014-02-19 20:41
單片機無系統時理論上應該是100%工作的,非要算空閑時間的話,就是所有延時程序
0
回復
matou
LV.3
3
2014-02-19 20:42
沒有操作系統何來CPU 資源,除了在休眠,其他都是在全速運行
0
回復
heal
LV.3
4
2014-02-19 20:44
@matou
沒有操作系統何來CPU資源,除了在休眠,其他都是在全速運行

能說詳細一點嗎?

0
回復
matou
LV.3
5
2014-02-19 20:45
@heal
能說詳細一點嗎?
空余時間就是CPU 做完了要做的事,通過延時或空循環等待任務的時間,這時候安排CPU 做別的事就不會影響其他任務
0
回復
heal
LV.3
6
2014-02-19 20:47
@matou
空余時間就是CPU做完了要做的事,通過延時或空循環等待任務的時間,這時候安排CPU做別的事就不會影響其他任務
那我怎樣才能知道,什么時候CPU做完了事情,我什么時候才可以安排CPU去做其他事情,這個“什么時候”我從何得知?
0
回復
matou
LV.3
7
2014-02-19 20:48
@heal
那我怎樣才能知道,什么時候CPU做完了事情,我什么時候才可以安排CPU去做其他事情,這個“什么時候”我從何得知?
單片機有沒有在做事情完全是按你的程序來的啊

 

0
回復
stony_s
LV.3
8
2014-02-19 20:50
cpu一直全速運行,又不是操作系統的阿
0
回復
for_real
LV.3
9
2014-02-19 20:51
文章中的意思,我沒有理解錯的話,應該是盡量減少子程序的占用時間,保證鍵盤掃描函數能在主函數的一個運行周期內有充分的時間來響應。這種設計方式不太好
0
回復
pirate
LV.4
10
2014-02-19 20:57
@for_real
文章中的意思,我沒有理解錯的話,應該是盡量減少子程序的占用時間,保證鍵盤掃描函數能在主函數的一個運行周期內有充分的時間來響應。這種設計方式不太好
支持樓上,如果你子程序不是寫成中斷的話,占用時間長就會影響你繼續操作。就會操作無響應,因為其他事還沒干完
0
回復
for_real
LV.3
11
2014-02-19 20:59
@pirate
支持樓上,如果你子程序不是寫成中斷的話,占用時間長就會影響你繼續操作。就會操作無響應,因為其他事還沒干完
個人一直傾向于講鍵盤掃描這樣的函數利用中斷完成響應

 

0
回復
heal
LV.3
12
2014-02-19 21:00
@for_real
個人一直傾向于講鍵盤掃描這樣的函數利用中斷完成響應 
鍵盤怎么中斷呢?中斷是哪個呢?是外部中斷嗎?

 

0
回復
for_real
LV.3
13
2014-02-19 21:02
@heal
鍵盤怎么中斷呢?中斷是哪個呢?是外部中斷嗎? 
如果是獨立鍵盤,用外部中斷自然最好。現在不大用51了,一般用430,它是支持IO口中斷的,內部也有AD,中斷采樣。在要求不高的應用里,我一般會用四個獨立按鍵,使用IO口中斷,或者矩陣鍵盤采用IO口中斷,有時也會用AD鍵盤,用AD采樣中斷來完成交互.

 

0
回復
heal
LV.3
14
2014-02-19 21:03
@for_real
如果是獨立鍵盤,用外部中斷自然最好。現在不大用51了,一般用430,它是支持IO口中斷的,內部也有AD,中斷采樣。在要求不高的應用里,我一般會用四個獨立按鍵,使用IO口中斷,或者矩陣鍵盤采用IO口中斷,有時也會用AD鍵盤,用AD采樣中斷來完成交互. 

謝謝哈

0
回復
soap泡泡
LV.4
15
2014-02-19 21:05
普通的51單片機在12m晶振下每ms大約可以執行500條指令普通的指令,假如你的中斷里的程序大于500條,而且中斷發生的間隔時間小于1ms,那么單片機就只能執行中斷程序不能執行其他程序
0
回復
heal
LV.3
16
2014-02-19 21:07
@soap泡泡
普通的51單片機在12m晶振下每ms大約可以執行500條指令普通的指令,假如你的中斷里的程序大于500條,而且中斷發生的間隔時間小于1ms,那么單片機就只能執行中斷程序不能執行其他程序
程序執行 軟件延遲的程序的時候,CPU在干嘛啊? 在軟件延遲的那段時間里,CPU能處理其他事情嗎?
0
回復
soap泡泡
LV.4
17
2014-02-19 21:10
@heal
程序執行軟件延遲的程序的時候,CPU在干嘛啊?在軟件延遲的那段時間里,CPU能處理其他事情嗎?
軟件延時時,cpu在執行軟件延時程序,如果這時你還想讓cpu執行別的程序,那么會影響延時時間
0
回復
2014-02-19 21:11
@heal
程序執行軟件延遲的程序的時候,CPU在干嘛啊?在軟件延遲的那段時間里,CPU能處理其他事情嗎?
不能吧,cpu就在執行延時程序,別的它干不了
0
回復
heal
LV.3
19
2014-02-19 21:14
做了一個電子鐘, 結果鬧鈴響放音樂的時候,數字時鐘就不顯示了
0
回復
soap泡泡
LV.4
20
2014-02-22 22:47
@heal
做了一個電子鐘,結果鬧鈴響放音樂的時候,數字時鐘就不顯示了
程序的調度做的不好
0
回復
heal
LV.3
21
2014-02-22 22:49
@heal
做了一個電子鐘,結果鬧鈴響放音樂的時候,數字時鐘就不顯示了

我是用中斷實行音樂播放。設備是51單片機。

這里,我將秒表和音樂播放放在一起。運行的時候發現有很刺耳的聲音(不是音樂),同時數碼管不顯示時鐘,嗯鍵盤也完全沒有作用。

Break2:

PUSH PSW

PUSH ACC ;保護現場

MOVTL1,#000H;賦計數初值,每10ms中斷一次

MOVTH1,#0DCH

DJNZ 61H,back1 ;10毫秒未到,返回 ,61的初值為#01H

JBCounState,COUNT

JBAlarmRing1,MUSIC1

LJMP return1

COUNT:

MOV 61H,#01H ;61H存放中斷次數

MOV A,#01H

ADD A,35H

MOV 35H,A

JBAlarmRing1,MUSIC1

CJNE A,#64H,back1 ;是否到達100個10毫秒,沒有則返回

MOV 35H,#00H ;毫秒位清零

MOV A,#01H

ADD A,36H ;秒位加1

MOV 36H,A

CJNE A,#3CH,back1 ;60秒到了沒有

MOV 36H,#00H ;秒位清零

MOV A,#01H

ADD A,37H ;小時位加1

MOV 37H,A

back1: LJMP return1 ;返回

return1:

POP ACC

POP PSW ;恢復現場

RETI ;中斷返回

//delay1:

//push 07h ;2毫秒延遲

//push 06h

//MOV R7,#1EH

//DE1: MOV R6,#1FH

//D21: DJNZ R6,$

//DJNZ R7,DE1

//pop 06H

//pop 07H

//RET

;============================================================================================

0
回復
heal
LV.3
22
2014-02-22 22:49
@heal
我是用中斷實行音樂播放。設備是51單片機。這里,我將秒表和音樂播放放在一起。運行的時候發現有很刺耳的聲音(不是音樂),同時數碼管不顯示時鐘,嗯鍵盤也完全沒有作用。Break2:PUSHPSWPUSHACC;保護現場MOVTL1,#000H;賦計數初值,每10ms中斷一次MOVTH1,#0DCHDJNZ61H,back1;10毫秒未到,返回,61的初值為#01HJBCounState,COUNTJBAlarmRing1,MUSIC1LJMPreturn1COUNT:MOV61H,#01H;61H存放中斷次數MOVA,#01HADDA,35HMOV35H,AJBAlarmRing1,MUSIC1CJNEA,#64H,back1;是否到達100個10毫秒,沒有則返回MOV35H,#00H;毫秒位清零MOVA,#01HADDA,36H;秒位加1MOV36H,ACJNEA,#3CH,back1;60秒到了沒有MOV36H,#00H;秒位清零MOVA,#01HADDA,37H;小時位加1MOV37H,Aback1:LJMPreturn1;返回return1:POPACCPOPPSW;恢復現場RETI;中斷返回//delay1://push07h;2毫秒延遲//push06h//MOVR7,#1EH//DE1:MOVR6,#1FH//D21:DJNZR6,$//DJNZR7,DE1//pop06H//pop07H//RET;============================================================================================

MUSIC1:

NOP

MOV DPTR,#MDAT ;表頭地址送DPTR

INC62H

MOV B,#00H ;表序號清0

MUSIC1_1:

NOP

CLR A

MOVCA,@A+DPTR ;查表取代碼

JZ END1_0 ;是00H,則結束

CJNEA,#0FFH,MUSIC1_5

LJMP MUSIC1_3

MUSIC1_5:

NOP

MOV 63H,A ;取音符代碼送63H

INCDPTR

MOV A,B

MOVC A,@A+DPTR ;取節拍代碼送64H

MOV 64H,A

MUSIC1_2:

NOP

CPL P1.6

MOV A,63H

MOV R3,A

LCALL MDEL1_0 ;最大一次是2毫秒

AJMPMUMIAO

MUSIC1_3:

NOP

//CLR TR0 ;休止100毫秒

SETBP1.6

INC DPTR

//MOVA,#7DH ;休止500毫秒

MOV A,B

MOVC A,@A+DPTR ;取節拍代碼送64H

MOV 64H,A

MUMIAO:

MOVA,35H

CJNE A,#64H,MUSIC1_2_0 ;是否到達100個10毫秒,沒有則MUSIC1_2_0

MOV 35H,#00H ;毫秒位清零

MOV A,#01H

ADD A,36H ;秒位加1

MOV 36H,A

CJNE A,#3CH,MUSIC1_2_0 ;60秒到了沒有

MOV 36H,#00H ;秒位清零

MOV A,#01H

ADD A,37H ;小時位加1

MOV 37H,A

MUSIC1_2_0:

MOV A,64H

CJNE A,62H,MUSIC1_2 ;中斷計數器(20H)=R7否?;不等,則繼續循環

//LJMP MUSIC1_4

//MOV R3,A

//LCALL MDEL1_0

MUSIC1_4:

MOV 62H,#00H ;等于,則取下一代碼

MOV 63H,#00H ;存入音樂音符 清零

MOV 64H,#00H ;存入音樂節拍 清零

INC DPTR

LJMP MUSIC1_1

END1_0:

NOP

SETBP1.6

CLRAlarmRing1

AJMPreturn2

MDEL1_0:

MOV R4,#02H ;延遲(2+13*R3)*1.09=

NOP

DJNZ R4,$

NOP

DJNZ R3,MDEL1_0

RET

NOP

return2:

POP ACC

POP PSW ;恢復現場

RETI ;中斷返回

MDAT:

DB2DH,30H,2DH,10H,28H,40H,2DH,40H,22H,40H,24H,80H

DB2DH,30H,2DH,10H,28H,40H,2DH,40H,1EH,40H,22H,80H

DB2DH,30H,2DH,10H,16H,40H,1BH,40H,22H,40H,24H,40H,28H,40H,0FFH,10H

DB19H,30H,19H,10H,1BH,40H,22H,40H,1EH,40H,22H,80H

DB00H

0
回復
close3
LV.5
23
2014-02-22 22:53
@heal
MUSIC1:NOPMOVDPTR,#MDAT;表頭地址送DPTRINC62HMOVB,#00H;表序號清0MUSIC1_1:NOPCLRAMOVCA,@A+DPTR;查表取代碼JZEND1_0;是00H,則結束CJNEA,#0FFH,MUSIC1_5LJMPMUSIC1_3MUSIC1_5:NOPMOV63H,A;取音符代碼送63HINCDPTRMOVA,BMOVCA,@A+DPTR;取節拍代碼送64HMOV64H,AMUSIC1_2:NOPCPLP1.6MOVA,63HMOVR3,ALCALLMDEL1_0;最大一次是2毫秒AJMPMUMIAOMUSIC1_3:NOP//CLRTR0;休止100毫秒SETBP1.6INCDPTR//MOVA,#7DH;休止500毫秒MOVA,BMOVCA,@A+DPTR;取節拍代碼送64HMOV64H,AMUMIAO:MOVA,35HCJNEA,#64H,MUSIC1_2_0;是否到達100個10毫秒,沒有則MUSIC1_2_0MOV35H,#00H;毫秒位清零MOVA,#01HADDA,36H;秒位加1MOV36H,ACJNEA,#3CH,MUSIC1_2_0;60秒到了沒有MOV36H,#00H;秒位清零MOVA,#01HADDA,37H;小時位加1MOV37H,AMUSIC1_2_0:MOVA,64HCJNEA,62H,MUSIC1_2;中斷計數器(20H)=R7否?;不等,則繼續循環//LJMPMUSIC1_4//MOVR3,A//LCALLMDEL1_0MUSIC1_4:MOV62H,#00H;等于,則取下一代碼MOV63H,#00H;存入音樂音符清零MOV64H,#00H;存入音樂節拍清零INCDPTRLJMPMUSIC1_1END1_0:NOPSETBP1.6CLRAlarmRing1AJMPreturn2MDEL1_0:MOVR4,#02H;延遲(2+13*R3)*1.09=NOPDJNZR4,$NOPDJNZR3,MDEL1_0RETNOPreturn2:POPACCPOPPSW;恢復現場RETI;中斷返回MDAT:DB2DH,30H,2DH,10H,28H,40H,2DH,40H,22H,40H,24H,80HDB2DH,30H,2DH,10H,28H,40H,2DH,40H,1EH,40H,22H,80HDB2DH,30H,2DH,10H,16H,40H,1BH,40H,22H,40H,24H,40H,28H,40H,0FFH,10HDB19H,30H,19H,10H,1BH,40H,22H,40H,1EH,40H,22H,80HDB00H
一上來就匯編?匯編可是最接近CPU的
0
回復
heal
LV.3
24
2014-02-22 22:54
@close3
一上來就匯編?匯編可是最接近CPU的
所以才難
0
回復
close3
LV.5
25
2014-02-22 23:00
@close3
一上來就匯編?匯編可是最接近CPU的
CPU是單片機里面的一個元器件,它的作用就是讀取你的代碼去執行
0
回復
close3
LV.5
26
2014-02-22 23:00
@close3
CPU是單片機里面的一個元器件,它的作用就是讀取你的代碼去執行
人腦有思考和記憶的功能,CPU就是電腦的思考功能
0
回復
close3
LV.5
27
2014-02-22 23:02
@soap泡泡
軟件延時時,cpu在執行軟件延時程序,如果這時你還想讓cpu執行別的程序,那么會影響延時時間

同意樓上

0
回復
elio
LV.2
28
2014-02-22 23:04
@soap泡泡
普通的51單片機在12m晶振下每ms大約可以執行500條指令普通的指令,假如你的中斷里的程序大于500條,而且中斷發生的間隔時間小于1ms,那么單片機就只能執行中斷程序不能執行其他程序
0
回復
elio
LV.2
29
2014-02-22 23:05
@heal
那我怎樣才能知道,什么時候CPU做完了事情,我什么時候才可以安排CPU去做其他事情,這個“什么時候”我從何得知?

多看看書啊

0
回復
elio
LV.2
30
2014-02-22 23:06
@for_real
如果是獨立鍵盤,用外部中斷自然最好。現在不大用51了,一般用430,它是支持IO口中斷的,內部也有AD,中斷采樣。在要求不高的應用里,我一般會用四個獨立按鍵,使用IO口中斷,或者矩陣鍵盤采用IO口中斷,有時也會用AD鍵盤,用AD采樣中斷來完成交互. 
高手
0
回復
backin
LV.4
31
2014-02-22 23:07
@heal
做了一個電子鐘,結果鬧鈴響放音樂的時候,數字時鐘就不顯示了

放出來看看啊

0
回復
主站蜘蛛池模板: 安泽县| 临朐县| 天台县| 思茅市| 海盐县| 天全县| 昭苏县| 和平区| 寿光市| 长丰县| 南投县| 阳春市| 尼勒克县| 兴国县| 信宜市| 衡南县| 土默特左旗| 伊金霍洛旗| 庐江县| 赤峰市| 宣威市| 铁力市| 宜君县| 罗山县| 大关县| 宽城| 满洲里市| 大城县| 当阳市| 云阳县| 福海县| 通河县| 万荣县| 农安县| 西峡县| 宁城县| 赣榆县| 阿合奇县| 山阴县| 淮滨县| 秭归县|