導航:首頁 > 操作系統 > 單片機d1ms

單片機d1ms

發布時間:2022-07-04 16:04:31

單片機延時1ms問題

首先,不知道你的晶振頻率是多少,然後不知道你使用的是哪種類型的單片機。
我根據KEILC的測試:for循環這個語句是雙周期指令2個機器周期,j=0;j<33;j++。這有三步單周期指令,每次三個機器周期。。。所以時間是(3j+2) 乘以循環次數i。就是時間微秒
上述指令在12MHZ的晶振頻率,AT89S52的單片機測試情況下為0.0001060秒。也就是1MS

② 單片機中定時器的初值產生1ms的定時,到底是65536-1000還是65535-1000 為什麼啊急急急

定時器計數最大值為65535,再計一次則溢出,產生中斷。也就是說初值設置成65535(65536-1)時,定時1個機器周期。所以正確答案是65536-1000,此時定時1000個機器周期,12M晶振1個機器周期為1微秒,1000個就是1ms啦!

③ 求一下51單片機匯編程序的解釋:不太明確這段程序功能,希望哪位大俠指點下!謝謝!

這是一個8位2進制數轉換成10進制顯示的程序,或者叫計算器。

改變的地方是為了模擬成功。低位在右。1101B轉換過來正好是13

;p3口接段碼a,b,c,d,e,f,g,p2.5-7口接位碼,選哪個數碼管顯示

a_bitequ20h;個位數存放處

b_bitequ21h;十位數存放處

org0000H

SJMPmain

ORG0030H

main:

movp0,#0ffh;初始化p0口

loop:mova,p0;將a中的十六進制數轉換成10進制

movb,#10;10進制/10=10進制

divab

movb_bit,a;十位在a

mova_bit,b;個位在b

movdptr,#numtab;指定查表啟始地址

mova,a_bit;取個位數

MOVCA,@A+DPTR;查個位數的7段代碼

movp3,a

acalld1ms

movp2,#40h;顯示個位數

acalld1ms

movp2,#0ffh;屏蔽所有顯示

acalld1ms

movdptr,#numtab;指定查表啟始地址

mova,b_bit;取十位數

MOVCA,@A+DPTR;查十位數的7段代碼

movp3,a

calld1ms

movp2,#80h;顯示十位數

acalld1ms

movp2,#0ffh;屏蔽所有顯示

SJMPloop

d1ms:

MOVR2,#200

DJNZR2,$

nop

RET

numtab:DB3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH

end

你看這句,loop:mova,p0;將a中的十六進制數轉換成10進制

把p0送A才開始的轉換。這可不是我加的。不知你說的fpga在哪裡。當然把p0改成fpga就是你說的那個功能了。

總之理解成16進制轉換成2位10進制數再顯示就對了,至於16進制數是哪來的就全看在那用了吧。

④ 51裡面 D1MS 地址碼 機器碼各是多少

地址碼和機器碼是產品出廠時已經設定的號碼,用以區別不同的設備,就如同機器的身份號。地址碼一般為7位數,機器碼為16位數。數字信息機和語音信息機採用的是地址碼。可手動更改數字信息機的地址碼,每台機器最多可設定7個地址碼,詳細操作請見說明書。語音信息機最多可設7個地址碼,每個地址碼7位,不能手寫,只能用專業寫碼器寫碼或更改。呼叫器、控制中心都有機器碼,為一組16位的數碼,出廠時設定,不能更改。呼叫器設定號碼就是把我們需要設定的餐桌號通過軟體與該呼叫器的機器碼對應。地址碼和機器碼的作用是區別每一個呼叫器、每一個主機、每一個信息機,所以多嘴貓產品的對應關系可以任意設定,不會出現串號等現象,保證了產品質量。

⑤ 求解釋單片機程序

這是一個 8位2進制數轉換成10進制顯示的程序,或者叫計算器。
改變的地方是為了模擬成功。低位在右。 1101B 轉換過來正好是13

;p3口接段碼a,b,c,d,e,f,g, p2.5-7口接位碼,選哪個數碼管顯示
a_bit equ 20h ;個位數存放處
b_bit equ 21h ;十位數存放處
org 0000H
SJMP main
ORG 0030H
main:
mov p0,#0ffh ;初始化p0口
loop: mov a,p0 ;將a中的十六進制數轉換成10進制
mov b,#10 ;10進制/10=10進制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;個位在b

mov dptr,#numtab ;指定查表啟始地址
mov a,a_bit ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
mov p3,a
acall d1ms
mov p2,#40h ;顯示個位數
acall d1ms
mov p2,#0ffh ;屏蔽所有顯示
acall d1ms

mov dptr,#numtab ;指定查表啟始地址
mov a,b_bit ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
mov p3,a
call d1ms
mov p2,#80h ;顯示十位數
acall d1ms
mov p2,#0ffh ;屏蔽所有顯示

SJMP loop
d1ms:
MOV R2,#200
DJNZ R2,$
nop
RET
numtab: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
end

你看這句, loop: mov a,p0 ;將a中的十六進制數轉換成10進制
把p0 送A 才開始的轉換 。 這可不是我加的。不知你說的fpga在哪裡。當然把p0改成fpga就是你說的那個功能了。
總之 理解成16進制轉換成2位10進制數再顯示就對了, 至於16進制數是哪來的 就全看在那用了吧。

⑥ 求單片機大神,用匯編編寫使動態數碼管分別顯示1-8,時間間隔1秒左右。

使用中斷就行了啊,C語言也是這樣的,編譯器會把C語言轉換成匯編語言。然後再轉換成HEX文件。下面是在你的程序上修改的,沒試過,你編譯一下看看有沒錯誤
ORG 00H
LJMP MAIN
ORG 001BH ;定時器1入口地址
LJMP TIMER1_ISR
ORG 0100H

MAIN:
MOV TMOD,#10H
MOV TL1,#0F0H
MOV TH1,#0D8H ;賦初值,定時10毫秒
SETB TR1
MOV IE,#88H
MOV R2,#20 ;R2的值可以隨時修改
MOV R3,#100 ;100 * 10MS = 1S

DISP:
MOV A,R2 ;南北方向顯示初值R2=20秒
MOV B,#10
DIV AB
MOV P0,A ;段選
MOV P2,#01 ;位選
ACALL D1ms ;延時
MOV P2,#00 ;清零
MOV P0,B
MOV P2,#02
ACALL D1ms
MOV P2,#00 ;清零
LJMP DISP ;這個地方就一直循環,怎樣實現定時器的作用??
;*********** 定 時 1 秒 中 斷 ***********
TIMER1_ISR:
MOV TL1,#0F0H
MOV TH1,#0D8H ;賦初值,定時10毫秒
PUSH ACC
PUSH PSW
DJNZ R3,TIMER1_END
MOV R3,#100
MOV A,R2
DEC R2
JNZ TIMER1_END
MOV R2,#20
TIMER1_END:
POP PSW
POP ACC
RETI
;************ 延 時 D1ms 程序***********
D1ms:
MOV R7,#02H
DL:
MOV R6,#0FFH
DL1:
DJNZ R6,DL1
DJNZ R7,DL
RET
;***************************************
END

⑦ 單片機關於定時器,定時1ms,定時器中寄存器高低位的值如何設置

你要定時 1ms 即是 1000uS,之所以是減 1000,就是認定計數器的計數脈沖周期為 1uS,
而 1uS 就是晶振(12MHz)的12分頻;
這些你理解就好;
至於計數分頻值是 0xfc18 還是 0xfc67 不必太在意,如果真的想得到准確的定時,則是需要通過測量以便調節分頻值來得到最接近值;

⑧ 一單片機程序問題

部分程序代碼:
#include "C8051F020.h" //包含C8051F020硬體信息的頭文件
#include "absacc.h" //包含絕對地址訪問信息的頭文件
#include"math.h"
sbit LCD_EP=P2^4;
sbit LCD_RW=P2^2;
sbit LCD_RS=P2^0;
#define LCD_Data_BUS_Out P7
#define LCD_Data_BUS_In P7

#define key P5
unsigned char keyval;
int i;
typedef unsigned int uint;
code unsigned char LCD_InitialCode[]=;

unsigned char temp;

void Reset_Sources_Init() //禁止看門
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}

void Port_IO_Init() //交叉開關配置
{

//P74OUT = 0xC0; //p7推挽
P2MDOUT = 0xff; //p2推挽
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40; //交叉開關使能

}

void Oscillator_Init() //振盪器初始化,使用片外晶體振盪器
{
uint i = 0;
OSCXCN = 0x67; //使用片外晶體諧振器,f>6.7MHz
for (i = 0; i < 3000; i++); //Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0); //檢測外部振盪器是否有效
OSCICN = 0x08; //選擇外部振盪器作為系統時鍾,禁止內部時鍾
}

//定時器1初始化函數,定時器1作為波特率發生器
void Timer_Init()
{
CKCON = 0x10; //C/T1直接使用系統時鍾作為時鍾源
TCON = 0x40; //C/T1允許
TMOD = 0x20; //C/T1方式2(8位重裝填計數)
TL1 = 0xFA; //C/T1波特率115200計數值
TH1 = 0xFA;
}

void Init_Device() // 設備初始化函數,在主程序中調用Init_Device()
{
Reset_Sources_Init(); //復位源初始化
Port_IO_Init(); //埠初始化
Oscillator_Init(); //時鍾源初始化
Timer_Init(); //定時器1初始化

}

有東西就發出來分享啊,我就直接寫下面了。

ORG 0000H
SJMP MAIN
ORG 0030H

MAIN :
MOV SP,#60H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV R2,#00H
MOV R3,#00
MOV R4,#00
MOV B,#00H
MOV 33H,#00H;十位
MOV 34H,#00H;個位
MOV 35H,#00H;高四位
KEYCODE EQU 35H
S0: LCALL PRESSKEY ;長調用有無按鍵按下

S1: LCALL DISPLAY ;長調用數字處理程序段
LJMP S0 ;返回S0

;******************* 有無按鍵按下
PRESSKEY:
MOV P1,#0F0H
MOV A,P1
CJNE A,#0F0H,D2
LJMP D5
D2: LCALL DELAY10MS

MOV A,P1
CJNE A,#0F0H,KEYVALUE
LJMP D5
;*********************按鍵鍵值判斷
KEYVALUE:MOV 33H,#00H
mov 34H,#00H
MOV P1,#0F0H
MOV A,P1
ANL A,#0F0H ;ANL與操作
MOV B,A
MOV P1,#0FH
MOV A,P1
ANL A,#0FH ;ANL與操作
ORL A,B ;ORL或操作
MOV KEYCODE,A

MOV R3,#00
D4: MOV A,R3
MOV DPTR,#TABBLE2
MOVC A,@A+DPTR
CJNE A,KEYCODE,D3
MOV A,R3
MOV R2,A
LJMP D5
D3: INC R3
LJMP D4
D5: RET
;***********************************數字處理程序段
DISPLAY:
MOV A,R2
CJNE A,#10,CMP1
CMP1: JC LOOP2
LJMP LOOP3
LOOP2: MOV A, R2
MOV 34H,A
LJMP DISPLAY1

LOOP3: MOV B,#10
DIV AB
MOV 33H,A
MOV A,B
MOV 34H,A
LJMP DISPLAY1
;**********************************************************顯示程序段
DISPLAY1:

MOV DPTR,#TABBLE1
MOV A,34H
MOVC A,@A+DPTR
MOV P2,#07FH
MOV P0,A
ACALL DELAY5MS

MOV DPTR,#TABBLE1
MOV A,33H
MOVC A,@A+DPTR
MOV P2,#0BFH
MOV P0,A
ACALL DELAY5MS
RET ;子程序返回
;*****************************************************
DELAY:
;延時子程序
MOV R5,#100
DELAY0: LCALL DELAY10MS
DJNZ R5,DELAY0
LJMP HUJK

DELAY10MS:MOV R4,#2
DELAY2 : LCALL DELAY5MS
DJNZ R4,DELAY2
LJMP HUJK
DELAY5MS:
MOV R6,#25
DELAY1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY1

HUJK : RET ;子程序返回

;***************************************************
TABBLE1:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,08H
;?******************************************************
TABBLE2:
DB 0EBH,77H,7BH,7DH,0B7H,0BBH,0BDH,0D7H,0DBH,0DDH,7EH,0BEH,0DEH,0EEH,0E7H,0EDH,0FFH
;*****************************************************
END

⑨ 單片機問題

單片機P1口是有內部上拉電阻的,如果電源都正常並且單片機的程序運行也正常的話,應該是外部介面的問題。有可能地話,將引腳與外部電路斷開後測一下引腳電壓試試,如果正常就可以確定是外部電路的問題單片機是一門實踐性很強的課程(是半軟半硬的東西),所以必須是理論聯系實踐,我試過很多種教學法,還是覺得平凡老師創立的任務教學法的效果最好。因此本人的課程也將按找這個思路來寫。 個人認為平凡單片機教程有些不足的地方,所以我也是改革的寫教程了,完全按照人的認知規律來寫,和平凡老師的教程在很大程度上不同。 好,下面我們開始學習了!請大家認真看! 一、什麼是單片機呢? 1、和我們的計算機(電腦)差不多,大家都知道,我們的計算機(電腦)裡面有 (1)CPU (2)硬碟 (3)內存 (4)主板 (5)等等。 這些東西是裝在一個叫主機的裡面的。好大!一個CPU大概要400塊,硬碟也要500左右,內存200左右,主板500左右,這些東西加在一起大概要1600塊左右。如果配上其他的,一台電腦要3000到4000左右吧。 2、但是如果把這些東西(CPU,硬碟,內存,主板)用集成塊做好後,如下圖所視: http://bbs.21ic.com/upfiles/img/200611/20061119213818365.jpg 3、請大家想想看這個集成塊值多少錢?它可是具備了計算機的功能啊。是不是很貴啊? 不,價格並不高,從幾元人民幣到幾十元人民幣,體積也不大,一般用40腳封裝,當然功能多一些單片機也有引腳比較多的,如68引腳,功能少的只有10多個或20多個引腳,有的甚至只8隻引腳。 4、當然,在單片機機內部,CPU,硬碟,內存,主板等等東西要改個名字了。 (1)CPU,它的名字沒有改,還是叫CPU(Central Processing Unit)。它是單片機的核心部件,包括運算器和控制器。運算器既是算術邏輯單元ALU(Arithmetic logic Unit),其功能是進行算術運算和邏輯運算。控制器一般由指令寄存器、指令解碼器、時序電路和控制電路組成。起作用是完成取指令、將指令解碼形成各種微操作並執行指令,同時控制計算機的各個部件有條不紊地工作。 (2)「硬碟」,改了名字,叫程序存儲器,也叫只讀存儲器。用ROM(Read only memery)表示。其作用和硬碟差不多,用來存放用戶程序。特點是:掉電後不會丟失數據。 (3)「內存」,也改了名字,在單片機里叫數據存儲器,也叫隨機存儲器。用RAM(Random Access Memery)表示。其作用是用於存放運算的中間結果,數據暫村和緩沖,標志位等。特點是:掉電後會丟失數據。 (4)「主板」,也改了名字,叫做I/O(輸入輸出設備)當然也包含了串列口,並行口,定時器,記時器等等。 5、以上談到的這些東西都在哪個集成塊裡面。我們把集成了這些東西的集成塊叫做單片機。有些外國人叫微控制單元MCU(Micro Controller Unit),也有人叫嵌入式控制器(Embedded Controller)。現在明白了什麼是單片機嗎? 6、我總結一下:將CPU、程序存儲器、數據存儲器、I/O介面電路、定時器/計數器等計算機部件集成在一塊晶元上,具有獨特功能的單片微型計算機稱著單片機。現在總明白了什麼是單片機吧! 請大家用自己的話闡述一遍什麼是單片機?? 二、當我們明白了什麼是單片機後,再來猜猜一般的單片機的價格吧? (1)Intel公司1980年推出的標准MCS-51內核8051現在要7到10塊錢。 (2)Atmel公司的AT89c51,AT89s51,AT89c52,AT89s52一般在7塊錢左右。 三、我想大家會想一個「電腦」竟然是10塊錢以內?功能怎麼樣?有什麼用啊? 我可以告訴大家,它的功能很強大,是以後電子產品的發展方向。只要具有了智能的電子產品,就少不了彈片機技術。非常有用,就業前景非常之好。那麼大家一定很想學了,於是去買了本書看。 哈哈,看不懂吧,感覺好難吧?那是因為你沒有掌握好學習單片機的方法。學單片機光看書是不夠的,也是學不會的。學單片機是需要一些條件的了! 下一頁是學習單片機需要的條件. 隨著社會的發展,電子行業出現了新的技術之一單片機技術,單片機技術在各行各業都得到了廣泛的應用,如果說學電子的人不學單片機技術就像我們讀書不讀外語一樣,被人認為是老土啊。 所以我們學電子的一定要學單片機技術。那麼如何學習這門技術呢?到底是難還是容易呢?這就要看你的學習方法了。 如果你閉門造車試的學習方法,肯定很難學好的。我根據我這幾年的教學經驗,我總結出了學單片機的相關教學方法,現在我將把我的教學過程寫出來。 學單片機第一步是:建立自己的學習條件。 四、學習單片機需要什麼條件? (1)一台電腦——用於編程和學習。(3000到4000塊錢) (2)編程器——用於把編寫好的程序寫到晶元中。(100到1000快錢) (3)模擬器——主要是為了調試程序的正確性。(1000到2000塊錢) (4)如果沒有編程器和模擬器,也可以買個便宜的單片機實驗板。如電子之城的AZ系統。也就300塊錢左右。 或者是電子之城的AS系統,大概是400塊錢。它集合了編程器和模擬器的所有功能。推薦買單片機實驗板! (5)還要多買幾塊單片機晶元,如:AT89C51,AT89S51,AT89S52等等。 五、有了這些東西,如果你已經學了一點單片機知識的話,就可以做搞開發了。 下面我來談談單片機開發的過程,以做流水燈為例進行講解。 (1)設計好硬體電路圖 按下圖把單片機的各個腳和元器件連接起來: http://bbs.21ic.com/upfiles/img/200611/20061119213942329.gif (2)在電腦上用軟體(如keil c51)編寫程序。 ORG 0000H LJMP START ORG 0030H START:MOV A,#0FEH LOOP:MOV P1,A LCALL DELAY RL A LJMP LOOP DELAY:MOV R7,#0FFH D1:MOV R6,#0FFH D2:DJNZ R6,D2 DJNZ R7,D1 RET END

想學習單片機應該首先學會這些東東:1>IAP(In Application Program)在應用編程 ISP(In System Program)在系統編程根本區別: IAP: 動態的,CPU CORE已經運行,自己從外面讀數據,完成寫入自身FLASH IAP: 靜態的,實質上是由外部實現串列編程寫入待.<2>答:具備在應用中編程IAP功能的單片機,其程序存儲器必須是可以重復燒寫編程的版本(比如FLASH)。可以用於具備遠程遙控軟體版本升級或者參數修改的產品項目之中(比如遠程抄表、用戶端電話計費等系統的遠程費率參數和演算法程序修改);也可以應用於具備自編程功能(免用微機和燒寫器)的單片機學習機、單片機單板機、實驗板、演示板、教學模塊等各種學習和實驗工具之中。對於處在同一個存儲器空間的FLASH程序存儲器,不能同時扮演「被燒寫存儲器」和「取指令存儲器」的雙重角色。為了解決這個矛盾,不同廠家的單片機採用了不同的解決方案,比如: ① 可以將FLASH程序存儲器分成地址有映射關系的兩個區,分別由各自的電荷泵提供燒寫電壓。當燒寫一個區時,該區的電荷泵工作,同時執行存放在另一個區的指令。例如,SST(Silicon Storage Technology)公司利用他的SuperFlash技術研製的FlashFlex51單片機系列,各個型號片內分別帶有20KB、36KB或68KB可多次編程的程序存儲器。該存儲器又分為主存儲區和次存儲區。各個型號的主存儲區分別為16KB、32KB或64KB,次存儲區則統一為4KB。 ② 可以將單片機的程序存儲器地址空間分為ROM區和FLASH區,ROM區在出廠之前就已經固化有燒寫專用程序,FLASH區作用戶程序存放區,這樣一來,即使在燒寫FLASH的同時,也不會影響對於ROM中程序的執行。MOTOROLA公司推出的MC68HC908系列單片機中採用的就是這種解決方案。 ③ PIC16F87X系列單片機中,採用了不同的解決方案。FLASH程序存儲器並不分區,在對其進行燒寫並且電源自動切換到電荷泵供電時,CPU自動停頓而等待。在一個單元燒寫操作完畢,FLASH工作電壓自動切換到正常值時,CPU才繼續執行FLASH中的燒寫專用程序或用戶程序。 ④ 在數據存儲器RAM和程序存儲器FLASH兩種存儲器統一編址的單片機中,還可以採用的另一種方案是,在准備修改FLASH區中的用戶程序之前,先把燒寫專用程序拷貝到RAM區,然後跳轉到RAM區去執行該程序,實現對FLASH程序存儲器的燒寫操作。在燒寫完成之後再跳回到FLASH存儲器執行正常的用戶程序。微芯公司新近推出的高性能PIC18C601/801單片機採用的就是這種解決方案。MOTOROLA公司推出的MC68HC908系列單片機的某些型號,也可以採用這種解決方案。SST89C54/58(簡稱89C54/58)是美國SST公司推出的多用途51系列單片機,片內集成了20 kB/36 kB的SuperFlashE'PROM程序存儲器,分為BLOCK0(16kB/32kB)和BLOCKl(4kB)兩塊。其中,BLOCKl可以映射(Mapping)到64kB存儲空間的最高端或最低端,而且,對於程序計數器來說可以是不可見的,

不知道是否能幫助你,希望你給予採納

閱讀全文

與單片機d1ms相關的資料

熱點內容
哪裡有無損音樂app下載 瀏覽:221
單片機如何使用proteus 瀏覽:991
java常用的伺服器 瀏覽:281
集結APP在哪裡下載 瀏覽:800
歐洲cf玩什麼伺服器 瀏覽:529
如何連接另一台電腦上的共享文件夾 瀏覽:681
如何讓桌面文件夾搬家到e盤 瀏覽:73
java自動格式化 瀏覽:619
ipad怎麼查看文件夾大小 瀏覽:583
手工粘土解壓球 瀏覽:552
在線視頻教育源碼 瀏覽:41
快四十學什麼編程 瀏覽:754
gnumakelinux 瀏覽:537
視易峰雲伺服器怎麼改系統 瀏覽:535
javamap取值 瀏覽:768
mac和win磁碟加密軟體 瀏覽:474
蘋果為什麼會連接不到伺服器 瀏覽:726
pdf格式文件如何保存 瀏覽:303
小霸王伺服器tx什麼意思 瀏覽:75
解釋dns命令 瀏覽:584