推荐阅读最新更新时间:2024-03-16 14:59
单片机入门教程第22课-串行口应用编程实例
1. 串口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就可以扩展一个并行口。 例:用8051串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,可以靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通讯之前,都要先对控制
[单片机]
用C51单片机实现中文输入法
说明: 拼音输入法杳询函数: unsigned char code * py_ime(unsigned char input_py_val ); input_py_val为已输入的拼音码字符串头指针, 反回值为中文的起始地址,当为0时,杳询失败 应用举例: { unsigned char input_string ={"bang"}; unsigned char chines_string ; sprintf(chines_string,"%s",py_ime(input_string)); } C51程序: //"********************CCDC01采集器测试仪软件:拼音输入法模块***************
[单片机]
AVR/C51和PIC八位单片机性能比较
八位单片机由于内部构造简单,体积小,成本低廉,在一些较简单的控制器中应用很广。即便到了本世纪,在单片机应用中,仍占有相当的份额。由于八位单片机种类繁多,本文仅将常用的几种在性能上作一个简单的比较,供读者在使用时作参考。 1. 51系列 应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史 悠久 ,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。 51系列优点之一是它从内部的
[单片机]
C51编程13-中断篇(外部中断)
CPU在执行的过程中,一般来说都是在执行主程序(main函数里面的代码)。如果希望处理其他的功能,可以通过查询的方式进行,判断是否需要处理或者通过中断的方式,进入中断服务函数程序里面执行。 前者是在主程序中判断条件是否成立,如果成立则执行其他功能,否则不执行;后者是CPU在执行过程中,判断是否有中断标志位,响应中断进入中断服务函数,执行相关功能。 MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。 下面通过讲INT0说明外部中断,INT1同理。 原理图: P0连接8个LED,INT0引脚连接一个按钮连接到地。 在中断系统中,INT0设计的寄存器中
[单片机]
c51编程中sbit 和bit有什么区别
首先,bit和sbit都是C51扩展的变量类型 sbit一般用来定义特殊功能寄存器的位变量,以方便对寄存器的某位进行操作的 例如:sbit TXD=P3^0; 这样就定义了TXD为位变量,并且这个sbit量有确定的地址 bit则与一般的变量差不多,只不过bit定义的变量只有两种值存在0或是1 例如:bit p=0;编译器在编译过程将分配地址,所分配的地址是随机的
[单片机]
C51单片机指针实例
#pragma src #include reg51.H f(){} f1(){} f2(){} main() { { int x; int *px; //下面这些表示虽然很烦,但是生成的代码却及其简洁: //将 xdata 型指针 0x4000 赋给 px px=(int xdata *)0x4000; //表示从 xdata 0x4000处取一个 char 给x x=*((char xdata *)0x4000); // 表示从 code 0x4000处取一个 word 作为 xdata 型的指针 给 px px=*((int xdata * xdata *)0x4000); //表示从 code 0x4000处取一个 wor
[单片机]
空操作NOP指令在ARM和C51的区别
(一)C51调用方法 #include intrins.h _nop_(); (二)ARM下调用方法 __asm void nop(void) { NOP } 然后在之后的C代码中调用该函数: void main() { ... nop(); ... } 关于NOP指令 在MCS-51单片机指令集中NOP的指令码为0x00,而ARM指令集中的NOP是一条伪指令,编译系统用一条MOV指令替代其执行。 NOP 编译系统生成的机器码: nop MOV r0, r0, lsl #0 编译系统生成的机器码: nop 那么ARM指令集中有没有指令码为0x00的指令呢?有! ANDEQ r0,r
[单片机]
C51实现精确延时函数
/************************** 延时函数 ***************************/ void delay_us_STC12(unsigned int us) { unsigned int i; us=us*12/11; //12/11是STC12C5408在22.1184MHz晶振 for( i=0;i us;i++); } void delay_ms_STC12(unsigned int ms) { unsigned int i,j; for( i=0;i ms;i++) for(j=0;j 1947;j++); //1947是STC12C5408在22.1184
[单片机]