设单片机程序编写教程的主频为12MHZ,编写一个延时一毫秒的程序。

设51单片机的主频为12MHz.试编写一段程序,功能为:对定时器T0初始化,使之工作_百度知道
设51单片机的主频为12MHz.试编写一段程序,功能为:对定时器T0初始化,使之工作
我有更好的答案
#include&reg52.h& //包含特殊功能寄存器的定义#define LED P1
//宏定义LED代表P1/* 函数申明 -----------------------------------------------*/void Init_Timer0(void);/*********************************************************************************** 函数名称 : main(void)** 函数功能 : 主函数*********************************************************************************/main(){ Init_Timer0();
// 定时器初始化 while(1);
// 循环,等待}/*********************************************************************************** 函数名称 : Init_Timer0(void)** 函数功能 : 定时器初始化子程序*********************************************************************************/void Init_Timer0(void)
//定时器初始化子程序{ TMOD |= 0x01;
//使用模式1,16位定时器,使用&|&符号可以在使用多个定时器时不受影响
//给定初值,这里使用定时器最大值从0开始计数一直到65535溢出 TL0=0x00; EA=1;
//总中断打开 ET0=1;
//定时器中断打开 TR0=1;
//定时器开关打开}/*********************************************************************************** 函数名称 : Timer0_isr(void) interrupt 1 using 1** 函数功能 : 定时器中断程序*********************************************************************************/void Timer0_isr(void) interrupt 1 using 1{ TH0=0x00;
//重新赋值,方式1是16位计数器,不能硬件重装初始值 TL0=0x00;
//指示灯反相,可以看到闪烁}
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。试用循环转移编写延时50ms,晶振12MHZ (单片机程序)的延时子指令_百度知道
试用循环转移编写延时50ms,晶振12MHZ (单片机程序)的延时子指令
我有更好的答案
你是想要左移还是右移?还是一直循环就可以了?
如果是左移右移就要调用了&intrins.h&的文件包,如果是一直循环,那么用while循环语句就可以实现了,如下:
左移右右:#include &reg52.h&
#include&intrins.h&
//包含_crol_函数所在的头文件
#define uint unsigned int
#define uchar unsigned char
void delayms(uint);
//说明子函数
//定袖个变量,用来给P1口赋值
void main()
//先点亮第一个发光管
delayms(500);
//延时500毫秒
aa=_crol_(aa, 1);
//将aa循环左移1位后同给aa
void delayms(uint xms)
for(i=i&0;i--)
for(j=110;j&0;j--);
我已经一句写出来,可以看得慬吧!
采纳率:38%
MOV R0,50;DL2:MOV R1,#250;DL1:NOP;
DJNZ R1,DL1
DJNZ R2,DL2精确延时时间为1*1us+[(1+1+2)*1us*250+(1+2)*1us]*10=10057us
void delay_1ms(uchar _1ms){ while (_1ms--) {
while(i--); }}需要50ms直接调用
delay_1ms(50);就行了。
R1,#98LOOP_2:
RET没有误差
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
晶振的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机50ms延时程序_百度知道
单片机50ms延时程序
若晶振频率为12MHZ,程序段如下:DEL: MOV R7,#200DEL1:MOV R6,#123
NOPDEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
RET 计算得延迟时间为50.001ms问:是否可以通过优化使延时恰好为50ms(可能要叠加几个2us),添加的语句越少越好。
我有更好的答案
用STC-ISP&V6吧,很方便DELAY50MS:;@12.000MHzPUSH&30HPUSH&31HMOV&30H,#98MOV&31H,#62NEXT:DJNZ&31H,NEXTDJNZ&30H,NEXTPOP&31HPOP&30HRET
如果要求计时很准确,最好还是用定时器。你这个程序虽然计算得比较准确了,可是有两点还没有考虑进来,一点是执行CALL指令调子程序的时间,一点是执行RET指令返回的时间,这两条指令各需要8个机器周期,所以,需要从上面的程序是减去16个机器周期的。所以,这种利用循环指令延时的时间是不太准确的,不过,用这种程序延时也是不要求十分精确的,没有必要,要准确就用定时器好了。
还是考虑用定时器吧,程序简单而且精度高。我现在写程序都必用定时器。
DEL: MOV R7,#2001DEL1:MOV R6,#
NOP1*200*123DEL2:DJNZ R6,DEL22*200*123
DJNZ R7,DEL12*200
RET2Total=1+200+200*123+400*123+400+2=74403所以如果是普通51的话,总延时为74.4ms
用延时程序 是不可能 很精确,只有用定时器中断才能达到最佳的效果。
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
延时的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序_百度知道
设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序
我有更好的答案
机器周期=12/6MHz=2μs定时100ms的计数值 =100ms/2μs =50000设T1工作于方式1(16位计数器)计数初值 =2^16 -=HMOV TMOD,#10H ;; T1工作方式1、定时模式MOV TH1,#3CH; 写入计数初值高8位MOV TL1,#B0H; 写入计数初值低8位SETB TR1; 启动T1,开始计时SETB ET1; 允许T中断SETB EA; CPU开中断SJMP $ ; 等待T1计时溢出中断
采纳率:93%
void Delay100ms()
//@6.000MHz{ unsigned char i, i = 98; j = 67; do {
while (--j); } while (--i);}
单片机的工作频率是多少
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机编程:设置一个1ms的延时程序 晶振12MHZ_百度知道
单片机编程:设置一个1ms的延时程序 晶振12MHZ
我有更好的答案
delay1ms(){
for(i=0;i&120;i++);}
MOV R2,#2DELAY1:
MOV R3,#250
DJNZ R2,DELAY1
高级工程师
汇编DELAY_1ms:MOV R2,#2DELAY1:MOV R3,#250DJNZ R3,$DJNZ R2,DELAY1RET
定时器啊,延时方式很不准确的啊在proteus下仿真 看看 效果啊可以交流
简单的方法,做一个循环,自加,然后算好时间,每条指令需要多长时间,然后对应的,自加多少次就够1秒就OK了
其他1条回答
为您推荐:
其他类似问题
晶振的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机头文件的编写 的文章

 

随机推荐