『壹』 設單片機晶振頻率為12MHZ,編寫出其延時100毫秒的程序
最好直接利用定時器延時,定時1毫秒,程序中調用延時函數就行了,Delay(100):
uint count; //定義外部變數
Delay( uint k) // 延時函數
{ count = k;
while(count!=0) ;
}
TIME0() interrupt 1 // 定時器0中斷函數
{ TH0 = 0XFC;
TL0 = 0X18;
count--;
}
『貳』 單片機編程 設單片機的晶振頻率為12MHZ,請編出利用定時/計數器T0,使之工作在方式1,產生50ms定時,
#include"reg52.h"
#define uchar unsigned char
sbit Wave=P1^0;
void Timer0() interrupt 1
{
static uchar t50ms;
TL0=0xb0;
TH0=0x3c;
t50ms=++t50ms%20;
if(!t50ms) Wave=~Wave;
}
void TimerInit()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
EA=1;
ET0=1;
}
void main()
{
TimerInit();
while(1);
}
直接打的,沒進行編譯,希望不會錯。
『叄』 設單片機的晶振頻率為6MHz,編程用定時器T0,在P1.0產生一個50Hz的方波。
f=50Hz,T=0.02s=20ms,所以每10ms中斷一次,P1.0取反若選用工作方式1,則計數初值為EC78H ORG 0000H
LJMP START
ORG 000BH
LJMP Timer0Interrupt;定時器中斷START:
MOV SP,#60H SETB P1.0
LCALL InitTimer0LOOP: NOP
;這可以加另外的代碼 LJMP LOOPInitTimer0://定時器初始化
MOV TMOD,#01H
MOV TH0,#0ECH
MOV TL0,#78H
SETB EA
SETB ET0
SETB TR0
RETTimer0Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH0,#0ECH
MOV TL0,#78H
CPL P1.0;輸出方波
POP ACC
POP DPL
POP DPH
RETIEND
『肆』 設單片機系統的時鍾頻率為12MHz利用定時器T0(任選工作方式),編寫一個完整的C51程序使P1.6和P1
12Mhz的51單片機,經過12分頻後為1MHz,則一個指令周期為1/1Mhz = 1us. 使能定時器 2 使能定時器中斷 3 編寫中斷程序我估計你是覺得1秒的時間,
『伍』 單片機設計
看了上邊的對話,挺有意思的。有能力就自己做,想讓別人做就花點錢,碼程序300起步多正常。
『陸』 設單片機的fosc=12MHz.使P1.0和P1.1分別輸出周期為1ms和10 ms的方波.請用定時器T0的方式2實現
周期為 1ms 和 10ms,最短 半周期為 0.5ms ①,
晶振12MHz,機械周期為T=12/Fosc=1us,定時器工作方式2 為 8位自重裝模式,最大計數為255,時間為255×1us=255us=0.255ms,為符合①需求,選擇 0.25ms,定時器初值 = 2^8-0.25ms/1us=6;
/***雙路方波發生器——火柴天堂作品-20130616***/
/***默認硬體環境:51單片機,12MHz晶振,Wave0、Wave1雙路方波輸出***/
/***功能描述:P10輸出1KHz方波,P11輸出100Hz方波***/
#include"reg52.h" //包含52系列頭文件
#define uchar unsigned char //定義 無符號字元型
#define uint unsigned int //定義 無符號整型
#define tl0 0x06 //0.25ms at 12MHz Fosc in Model 2
sbit Wave0=P1^0;
sbit Wave1=P1^1;
#define Wave0_HalfCycleAt250us 2 //方波0 半周期時間t=0.25ms×2=0.5ms,周期T=2t=1ms
#define Wave1_HalfCycleAt250us 20 //方波1 半周期時間t=0.25ms×20=5ms,周期T=2t=10ms
void Timer0() interrupt 1 //定時器T0 中斷 函數
{
static uchar t0=0,t1=0; //定義靜態變數
t0=++t0%Wave0_HalfCycleAt250us; //該句等效於:t0++;t0%=Wave0_HalfCycleAt250us;
if(!t0)Wave0=~Wave0; //方波輸出,半周期為0.5ms,周期為1ms
t1=++t1%Wave1_HalfCycleAt250us; //該句等效於:t1++;t1%=Wave1_HalfCycleAt250us;
if(!t1) Wave1=~Wave1; //每隔5ms卻換一次電平
}
void TimerInit() //定時器初始化 函數
{
TMOD=0x02; //T0 8位定時器
EA=1; //允許系統中斷
ET0=1; //允許T0中斷
TH0=tl0;
TL0=tl0;
TR0=1; //T0開始計時
}
void main()
{
TimerInit();
while(1);
}
『柒』 設單片機晶振頻率12mhz,使用定時器1以工作方式1產生周期為100ms的等寬方
假設用P1.1輸出,程序如下:
#include<reg52.h>
//主程序
void main()
{
TMOD=0x10;// 定時器1工作方式一
ET1=1;
EA=1;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1);
}
//中斷子程序
void Timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
P1^1=~P1^1;
}
『捌』 設單片機的晶振為6MHz,要求用T0定時150us,分別計算採用定時方式0,定時方式1時的初始值
void Timer0Init(void)//150微秒@12.000MHz { AUXR |= 0x80;//定時器時鍾1T模式 TMOD &= 0xF0;//設置定時器模式 TL0 = 0xF8;//設置定時初值 TH0 = 0xF8;//設置定時...
『玖』 設單片機fosc=12MHz,利用T0方式1產生10ms定時,在P1.0引腳上輸出周期為2ms的方波。
1、你的思路和程序都有問題
2、如果你想在P1.0引腳上輸出周期為2ms的方波,T0定時中斷應該定在1ms,然後再中斷程序中對P1.0取反,每個1ms對P1.0取反一次,就得出周期為2ms的方波。
3、如果是定時10ms,計數器初值應該是D8F0H,而不是6318H
MOV TH0,#D8H
MOV TL0,#F0H
4、MOV R1,#500指令是非法的,R1是8位寄存器,最大賦值為255。
『拾』 設單片機8051的時鍾頻率為MHZ,試編寫50ms的軟體延時程序。
12MHZ就是一個指令周期是(即1s/(12*1000*1000HZ))=1/1.2us,所以,可以通過定時器來實現,設置定時器的計數為65536-(50*1200)即可:TL1=0x15; TH1=0xa0;