单片机用c语言编程的问题

2024-05-08 21:08

1. 单片机用c语言编程的问题

1大括号主要是告诉编译器这是一个程序段,不可能空格代替,空格只有用在字符串时才被编译器识别。
2程序的延时主要是与你用的晶振有关,计算方法:如果你的用12M晶体,一般的51单片机12分频之后就只有1M了,1M就是它的工作速度(也叫做机器周期,大小为1us),指令执行的时间叫做指令周期,一个机器周期内执行一个单周期指令,NOP是单周期指令(用时为1us)。空格不会被编译器认为有空格的,你用多少都没有用;一个逗号就是一个空语句,常被编译成NOP指令。
3你可以用_nop();这是一个空跳的函数,多调用几次就能达到效果。一般延时最好用,定时器,

单片机用c语言编程的问题

2. 单片机C语言中碰到的问题?

都是循环延时函数,其中都包含了如下两句;
  for(m=20;m>0;m--) 、 for(n=20;n>0;n--);
但是不同的是语义不同(这里就是有无“;”分号的不同);

而

是镶套循环,那么其循环次数 = m * n;
而

则是两个独立的循环,其循环次数 = m + n;

3. 单片机c语言的一些疑问

首先是const定义的数组我看他们说
const定义的数组省内存
怎么个什么法
如果要省内存直接定义为code不就得了直接去了rom不是更省内存.
答:
const定义的数组省内存?没这个说法。
const定义的数组只是在运行时不允许改变而已。
如:
const
char
data
aqq[3]={1,2,3};
如果执行这句:
aqq[1]++;则出错。如果在定义时加上code则定义在代码区:
const
code
aqq[23]={1,2,3};
还有就是c语言的变量不是需要内存吗,
单片机是怎么分配内存的,是把写好的程序放进单片机让后用程序指针一条一条的指,
答:
单片机分配内存实际上很复杂:
定义的数据不同,分配内存的方式就不同。比如Int/
char
/long
int等数据类型,定义时看似简单,事实上编译器要化很多代码为它们分配不同的数据空间。因在汇编语言里没有这些数据类型,你把C语言转变成汇编,就要把C的数据让汇编能“理解”。比如INT占两个字节,char占一个字节。在代码里就要制定这样的“规则”来进行数据传递。
至于是放在ROM还是RAM里,要看定义时的方式:加了CODE就在ROM里,否则在RAM里。
如果发现有变量就分配内存
还是在Keil
软件中编译时就分好了那些因该是放在内存中,那些是放在rom中.
答:
在Keil
软件中编译时就分好了那些应该是放在内存中,那些是放在rom中.
但是在RAM里变量的存放就复杂了。程序要根据不同的状态决定怎样分配空间,而且在运行中这些分配方式还可能改变。比如一些变量在用过一遍后程序发现不再用了,就会把它的存储区抹去以节约空间。这叫“覆盖”。
如果楼主一开始学了汇编语言,理解起来比较容易。一开始就从C语言学,会碰到这些问题。

单片机c语言的一些疑问

4. 单片机C语言问题

三种可能,
1、如果是多个数码管都很亮的话,是数码管的驱动电流太大,这种情况可串接一个小电阻实现。
2、是显示子程序里面的延时时间太长,一般5MS就够了。
3、也可能是因为你定义int s[4];是局部变量,当这个子程序执行结束后,变量释放,数值是随机的。虽然说单片机的程序的执行速度很快能够弥补这一点,但还是有可能会出问题的。建议把int s[4];定义为全局变量来试试。

不会有大问题的。加油! 

我不知道你的整体电路时怎么实现的。你补充的很对,单片机的输出的控制信号应接到锁存器的输入端,锁存器的输出信号应与数码管的控制引脚相连接,这样才有锁存的意义,锁存器的输入输出如果弄反了,肯定不能工作的。如果还不行,建议你先试试把数码管的位选和段选直接接到单片机的IO来试一试,看程序本身有没有问题。程序没问题的话,那就是电路的问题了。

5. 单片机C语言程序结构问题

想象一下,一个公司、企业,有什么结构。举个最简单的例子:
1、董事长
2.1、人事部经理,2.2、市场部经理,2.3、生产部经理……
3.1.1、人事专员(后勤),3.2.1、市场调研人员、3.2.2、业务员,3.3.1、一线生产员工
就不多写了,看看跟单片机C语言有什么通性。
显而易见,主函数 就是 董事长了。
这个“董事长”下属有三个部门经理分别是
1、“人事部经理(系统时间,负责安排各个时间节点)”;
2、“市场部经理(系统输入/输出统筹,如按键处理、界面显示等)”;
3、“生产部经理(各不可见外设功能函数,如EERPOM等IC)”;
而每个经理都有下属帮它做事:
1、“人事专员(定时器,负责提供时间依据,就像记录考勤)”隶属“人事部经理”;
2、“市场调研人员(系统输入状态,如按键扫描)”、“业务员(系统输出、如显示,负责给客户展示)”,隶属“市场部经理”;
3、“一线生产员工(设备驱动,如EEPROM读/写驱动)”,隶属“生产部经理”;
很明显,“人事部经理”无权叫“业务员”帮它干活,“市场调研人员”也无权指挥“一线生产员工”做事。部门间的信息交流,只能通过“文件(变量、标志位、状态值)”传递给 上级后,由上级指挥它的另一个下级做事。
这就是 结构,每个功能函数,只隶属于它的 父级 函数,其他函数不能随意调用。不同函数之间的信息交流,需要通过 父级函数进行变量传递。

单片机C语言程序结构问题

6. 单片机编程问题

嘿嘿   俺帮你解答吧
给你一个算法:
1   采用一个循环结构: 循环次数为20次,开始时,设计一个片外的数据指针DPTR指向1000H,
在设计片内的数据指针;R1指向30H;R0的指向是可以切换到,可以指向10H,也可以指向50H;
R2保存大于128存放的地址10H;R3保存小于128存放的地址50H;
2   循环体:  就是下哦那个片外取数据,然后与128比较大小,如果等于128则存放在指针R1所指的单元;如果大于128则(切换指针R0指向R2保存的地址)存放在指针R0所指的单元;
如果小于128则(切换指针R0指向R3保存的地址)存放在指针R0所指的单元;
修改指针。
3  循环次数减1,不等于0,继续循环,否则结束。
 
 呵呵   满意就选满意回答吧

7. 单片机c语言问题

您好,我看你用的是51单片机吧?

是这样的,TH0是计时器0的高八位(H代表High),TL0是计时器0的低八位(L代表low),两个八位二进制数合为一个十六位二进制数为计时器计数所用。
计时的时候,依照晶振频率(一般是晶振周期的12倍加1)的不同不断自加,直到加到TH0和TL0都溢出(即超出16位整形数范围)的时候,执行一次timer0函数的操作,一般此时会将定时器0初值重置,以保持此频率调用函数。

这里-10000/256其实就是取了-10000的高八位,-10000%256就是取了-10000的低八位,从这个初值开始加到16位整形数溢出的时候就是一个计时周期。

我上学期才学用过单片机,也不是非常擅长,还在学习中,如果有疑问欢迎HI我一起探讨。

单片机c语言问题

8. 单片机编程问题

你得先知道什么是单片机:
单片机是指一个集成在一块芯片上的完整计算机系统。尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。
然后,所谓的单片机编程就是,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分就是能过单片机编程来实现。单片机能识别的语言是硬件语言即汇编,因此编程就是围绕汇编来实现,有直接用汇编程序来编写的,但是较难调试的编写,特别是一上规模就更不易实现,因此常用高级语言来写然后通过编译器转化成汇编,如用C或是C++等。单片机编程还会由于其位数不同而有所差异,如8位单片机编程,16位单片机编程,32位单片机编程等
最新文章
热门文章
推荐阅读