目的:实现流水灯。
源程序:
/*本程序结合STC89C51使用,晶振12M,中间用到串口中断子程序是利用STC单片机的自定义ISP下载功能,自定义下载命令是FEH,关于自定义下载请参考《用51单片机就用STC51,手把手教你STC51的ISP》*/
#include"at89x51.h"
//#include"reg51.h"
#include "intrins.h"
#include
sfr ISP_CONTR =0xE7;
delay_05s()
{
int i;
i=647395;
for(;i!=0;i--);
}
void serial() interrupt 4 //编号0-4,外中断0,定时器0,外中断1,定时器1,串行中断
{
int a;
RI=0;
a=SBUF;
if (a==0xFE)
{delay_05s();
delay_05s();
ISP_CONTR=0x60;}
else
SBUF='A';//若不是自定义下载命令则返回'A'
while(!TI);
TI=0;
}
void main(void)
{
unsigned int a,c;
unsigned char b;
TMOD=0x20;
TH1=0xf4;//波特率4800
TL1=0XF4;
TR1=1;
SCON=0XF8;
PCON=0X80;
EA=1;
ES=1;
RI=0;
b=0xfe;
while(1)
{
P1=b;
b=_crol_(b,1);//字符中的位左移1位(伪本征函数)
for(c=0;c<30000;c++);/*延时,实践表明当小于值大于等于32768(刚好是unsigned int最大值65535的一半)时,此句指令执行时间大于1秒*/
}
}
程序附加说明:
1.关于自定义下载,略微解释下原理,电脑中STC-ISP软件向单片机发送自定义下载命令后,引起单片机的串口中断,并进入中断子程序:判断是否为设定“自定义下载命令”-延时1秒-执行重启命令“ISP_CONTR=0x60;”(即MOV ISP_CONTR(0XE7),0X60),单片机重启并先运行ISP监视程序,电脑STC-ISP软件便把.hex文件数据下到STC单片机中去。
2.流水灯循环左移右移,用C语言,要高效的话,只有用伪本征函数文件“intrins.h”中的_crol_(),_cror_()...等等函数,具体解释如蓝色文字,例如,要用P1口驱动8个共阳连接的二极管左循环一个一个地亮,语句是 P1=_crol_(a,1);//a储存被移位的字符。
c51中的intrins.h库函数
_crol_ 字符循环左移
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作8051 NOP 指令
_testbit_ 测试并清零位8051 JBC 指令
详解:
函数名: _crol_,_irol_,_lrol_
原 型: unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
功 能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令
相关,上面几个函数不同于参数类型。
例:
#include
main()
{
unsigned int y;
C-5 1 程序设计 37
y=0x00ff;
y=_irol_(y,4); /*y=0x0ff0*/
}
函数名: _cror_,_iror_,_lror_
原 型: unsigned char _cror_(unsigned char val,unsigned char n);
unsigned int _iror_(unsigned int val,unsigned char n);
unsigned int _lror_(unsigned int val,unsigned char n);
功 能:_cror_,_iror_,_lror_以位形式将val 右移n 位,该函数与8051“RRA”指令
相关,上面几个函数不同于参数类型。
例:
#include
main()
{
unsigned int y;
y=0x0ff00;
y=_iror_(y,4); /*y=0x0ff0*/
}
函数名: _nop_
原 型: void _nop_(void);
功 能:_nop_产生一个NOP 指令,该函数可用作C 程序的时间比较。C51 编译器在_nop_
函数工作期间不产生函数调用,即在程序中直接执行了NOP 指令。
例:
P()=1;
_nop_();
P()=0;
函数名: _testbit_
原 型:bit _testbit_(bit x);
功 能:_testbit_产生一个JBC 指令,该函数测试一个位,当置位时返回1,否则返回0。
如果该位置为1,则将该位复位为0。8051 的JBC 指令即用作此目的。
_testbit_只能用于可直接寻址的位;在表达式中使用是不允许的。
3.至于>>=,>>,<<,<<=的移位运算符,不要天真以为它会循环移位,事实上,一个8位的字符,左移一位之后,最右边一位变成0了,而非原来最左边的一位。如果左移8位,就意味着这个8位的字符变成0x00了。
关键字:单片机 c语言 流水灯制作 intrins.h头文件
引用地址:
结合单片机学习板学习c语言之流水灯制作--intrins.h头文件
推荐阅读最新更新时间:2024-03-16 15:03
应用于仪表板控制及车身控制的新一代MCU技术
在汽车电子的各个系统当中,往往需要采用微控制器(MCU)做为运作控制的核心,而汽车对电子系统的倚重,也刺激车用微控制器市场的快速成长。车用微控器涵盖8位、16位、32位等低、中、高阶产品等级,各有其适合的应用系统,大致如下:
8位MCU:主要应用于车体的各个次系统,包括风扇控制、空调控制、雨刷、天窗、车窗升降、低阶仪表板、集线盒、座椅控制、门控模块等较低阶的控制功能。
16位MCU:主要应用为动力传动系统,如引擎控制、齿轮与离合器控制,和电子式涡轮系统等;也适合用于底盘机构上,如悬吊系统、电子式动力方向盘、扭力分散控制,和电子帮浦、电子剎车等。
32位MCU:主要应用包括仪表板控制、车身控制、多媒体信息系统(Telem
[嵌入式]
MSP430单片机硬件知识-5种低功耗模式
5种低功耗模式分别为LPM0~LPM4(LOW POWER MODE),CPU的活动状态称为AM(ACTVE MODE)模式。其中AM耗电最大,LPM4耗电最省,仅为0.1uA。另外工作电压对功耗的影响:电压越低功耗也越低。 系统PUC复位后,MSP430进入AM状态。在AM状态,程序可以选择进入任何一种低功耗模式,然后在适当的条件下,由外围模块的中断使CPU退出低功耗模式,返回AM模式,再由AM模式选择进入相应的低功耗模式,如此类推。 工作模式的选择由状态寄存器SR中的SCG1、SCG0、OSCOFF、CPUOFF位控制。由于在CPU的头文件中对CPU内的各寄存器和模块的各种工作模式都作了详尽的定义,所以编程时尽可能的利用就
[单片机]
关于单片机连接ESP8266模块截取其回显内容
1,首先,ESP使用串口,跟51单片机通信,控制端可以使用手机,但是,51单片机和手机不在一个档次,那么在51单片机上需要分析操作。 2,ESP8266在接收或者发送数据时,会向串口发送回显内容,也就是提示信息,提示接收到了什么,发送了什么,所以,在单片机上做字符串的分析截取很重要,不然手机和单片机的通信质量大大下降,前期的wifi小车写项目的时候,这个问题困扰了我很久,后来进度过慢,我就折衷的使用了分析一个字符的方法,对小车进行控制,但是这样的处理方式很差。 3,前阵子终于把wifi小车做完了,虽然只是简单的行进和lcd显示以及避障,但也不能继续做下去了,需要去学新东西了,在这之前我需要把ESP用的完善了才能安心学下一步
[单片机]
[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_rng] rng随机数生成器配置和使用
Random Number Generator (RNG) The Random Number Generator (RNG) generates true non-deterministic random numbers derived from thermal noise that are suitable for cryptographic purposes. The RNG does not require a seed value. 随机数生成器(RNG)从热噪声中生成真实的非确定性随机数,适合于加密目的。 RNG不需要种子值。 /*****************************************
[单片机]
51单片机制作的波形发生器
相信很多朋友都可能接触到一个波型发生器的制作,可能刚刚入门,做的东西也不会说是很复杂。可能就一个矩形波,或者是三角波。但是网上的很多资料是忽悠人的,就此,我也提供一个比较完整的波型发生器 C51 原代: 该系统的软件比较典型:包括键盘的应用,显示的应用和 DA 转换器的应用。本设计中,输出的波形有三种:正弦波,方波,三角波。 方波的输出最为简单,只要按照设定的周期值将输出的电压改变即可。 三角波的输出也比较简单,单片机的输出只要完成数字量递增和递减交替进行即可。、 正弦波的输出最麻烦,如果在软件中计算出输出的各点电压值,将会浪费很多的 CPU 时间,以至于无法满足频率的要求。通常最简单的方法是通过手动的方法计算出输出各点的电压
[单片机]
采用Atmega32单片机车门压力测试仪制作
车门压力测试仪为便携手持式结构,采用专用压力测试传感器和测试管理系统组成,专门用于检测地铁车辆客室车门关紧力、最小障碍物探测,及车门防夹保护功能检测。设备能够设置和记录开关门次数、时间、试验项目,系统可以自动有效的完成试验要求并自动记录试验结果生成报表。 车辆车门尤其是列车等高速运行车辆的车门是一个安全性能要求较高的产品,其各项性能指标必须保持在一个相对安全的取值范围内,以保证车辆的安全运行。这不仅要求制造厂家在产品制造过程中需要测试这些参数,同时在产品投入使用后的检修保养过程中也需要检测这些参数,做为产品的安全使用提供必要的参考信息;长期以来,由于我国对检测仪器的研制重视不够,通常的检测手段主要是靠检测人员借助多种手工工具辅
[测试测量]
用单片机设计A/D、D/A转换器
1、PIC16C62%26;#215;;系列单片机的特点
PIC16C62%26;#215;系列为RISC精简指令、哈佛结构总线、18个引脚的单片机。具有低功耗、高性能、全静态、35条指令极易编程的特点。OTP 片种的性价比极高。除了具备一般单片机的特点外,PIC16C62%26;#215;系列内部集成了两个模拟比较器和一个4bit的可编程基准电压源(REF)。如果利用该单片机的这些特点,只需几个外围元件就具备A/D与D/A转换功能,且分辨率达到8bit~10bit。价格上的优势使其在工控行业、仪器仪表、家电产品的应用前景极为乐观。
本文以8bit分辨率论证A/D、D/A转换的实现方法,更高分辨率的方案完全
[单片机]
Microchip推出集成微型FPGA的PIC16 微控制器,售价不到 50 美分
编译自EEJOURNAL Microchip 现在提供一款基于闪存的微控制器,集成可编程逻辑块,其售价不到50美分。 Microchip PIC16F13145 系列的九个新产品,与其他型号16F系列采用相同的 8 位 RISC 微处理器架构,但它们还集成了一个新的可编程逻辑块,称为可配置逻辑块 (CLB)。 PIC16F13145 微控制器系列中的器件采用 8、14 和 20 引脚封装,具有 3.5 至 14 KB 闪存和 256 至 1024 字节 RAM。 Microchip PIC1613145 微控制器系列的九个成员具有相同的内部架构,但具有不同数量的 RAM 和闪存,并提供不同的封装,具体取决于您应用的 I/O
[单片机]