推荐阅读最新更新时间:2024-03-16 16:06
keil c51是如何启动c程序的
汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和链接。下面看看它和main()函数是如何编译的; //主函数如下; void main(void) { while (1)这是个无条件空循环。 { } } 把上面的main()函数编译后的汇编程序和反汇编代码整理后对照如下; ?C_C51STARTUPSEGMENTCODE ?PR?main?TESTMAINSEGMENT CODE ?STACKSEGMENTIDATA RSEG?STACK DS1 CSEGAT0 ?C_STARTUP:LJMPSTARTUP1 C
[单片机]
【C51自学笔记】串口通信+RS-232C接口+ RS-422A/RS-485接口
简介: 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 并行通信 串行通信 串行通信的异步通信 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。 串行通信的传输方向 单工是指数据传输仅能沿一个方向,不能实现反向传输。 半双工是指数据传输可以沿两个方向,但需要分时进行。 全双工是指数据可以同时进行双向传输。 串行
[单片机]
C51 用一个外部中断0检测过零脉冲,并产生脉冲
用一个外部中断0检测过零脉冲,然后用一个定时器产生一个脉冲即可。 #include reg52.h #define uint unsigned int /*宏定义*/ #define uchar unsigned char /*宏定义*/ //#define Time_5ms (0x10000-5000) //fosc=12M #define Time_100us (0x10000-100) sbit P2_0=P2^0; uint Time_5ms=10000; void time_initial(); void main() { P2_0=0; time_initial(); while(
[单片机]
对于c51外部中断和程序调用的理解
首先介绍一下C51外部中断的基本概念 中断的优点: 1、实时处理。需要CPU立即做出相应或处理。 2、异常处理。运行过程中,出现断电、程序出错等问题,就需要CPU对故障源进行处理。 3、提高效率。采用中断技术可以大大提高CPU的运行效率。 中断源:C51单片机有5个中断源(2个外部中断、2个定时器中断和一个串口中断)。对中断的配置操作,主要通过控制三个寄存器就可以(中断允许寄存器IE)、定时器控制寄存器(TCON)和中断优先级寄存器(IP)。即通过控制EA EX IT 的直接赋值,即可调用中断服务程序 注:中断服务程序与while(1)中的程序调用是不一样的 中断服务函数:在CPU接收到中断后,会执行相应中断的中断服务函数
[单片机]
C51中延时程序的编写
C51及C51和汇编的混合编程的资料都是从前辈那儿偷来的,先谢谢各位前辈的分享!:) 众所周知,c51在编程时很难掌握程序运行的时间,所以编写延时程序时很难做到很精确,解决的方式有插入汇编语句,但总觉得汇编用起来不是那么顺手,还可以用定时器来做,但只是一个很小的延时程序而已,不必小题大作。其实办法还是有的,下面介绍一下常用的几种延时程序。 1、us级延时程序 常用的一个函数如下: void delayus(unsigned char x) { while(--x) ; } 生成的汇编代码为: C:0x001C
[单片机]
在keil编程环境中遇到几种常见警告分析
keil中常见的几种警告,固然,相对于错误的,警告的程度不及错误的严重性,有时候忽略,会出现意想不到的错误。先看看常见的几种错误,分析出来现的原因。 1. Warning 280: i :unreferenced local variable 说明 局部变量 i 在函数中未作任何的存取操作 解决方法 消除函数中 i变量的宣告 2 Warning 206: Music3 :missing function-prototype 说明 Music3( )函数未作宣告 或未作外部宣告 所以无法给其他函数调用 解决方法 将叙述void Music3(void)写在程序的最前端作宣告 如果是其他文件的函数则要写成 extern void
[单片机]
C51开发中的static, const, code关键字
static关键字 static在C里面可以用来修饰变量, 也可以用来修饰函数 static修饰变量 变量在C里面可以存在三处: 全局数据区, 栈和堆. 堆和栈是不同的. int a ; int main() { int b ; int c* = (int *)malloc(sizeof(int)); } 上面的代码中, a是全局变量, b是栈变量, c是指向堆变量的指针 static对全局变量的修饰: 限制了只能是本文件引用此变量. 有的程序由多个C文件组成, 可以互相引用变量, 但加入static修饰之后, 只能被本文件中函数引用. static对栈变量的修饰: 栈变量的生命周期延长到程序执行结束时. 一般
[单片机]
C51编程的一些概念
l 绝对地址访问 l C与汇编的接口 l C51软件包中的通用文件 l 段名转换与程序优化 第一节 绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用 #include absacc.h 即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知 例如: rval=CBYTE ;指向程序存贮器的0002h地址 rval=XWORD ;指向外RAM的0004h地址 2. _at_关键字 直接在数据定义后加上_at_ const即可,但是注意: (1)绝对变量不能被初使
[单片机]