单片机的问题

1.unsignedcharcodedispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};这是定义了一个一维数组dis... 1.unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; 这是定义了一个一维数组dispbit,可是code在这里是什么意思啊???

2.void T1zd(void) interrupt 3 //3定时器1的中断号 1定时器0的中断号 0外部中断1 2外部中断2 4串口中断
{
TH1 = 0x1c; //12.000
TL1 = 0x18;

LedNumVal++;
如上是一个定时响应程序,我的问题是interrupt 3是怎么定义的,我并没有定义过啊,而且头文件中#include <reg52.H>,#include <intrins.h>好像也没有定义过,求人解惑下,谢谢!!
展开
 我来答
高山入云
推荐于2017-11-24 · TA获得超过1072个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:152万
展开全部
1。“code”是单片机C语言特有的关键字
在单片机中RAM的空间特别小,特别珍贵。RAM空间,存放变量。而一些常量,比如码表等常量放在ROM中。所以单片机中code就是告诉单片机这个数据放入ROM中。
本例中dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; 数组内容为常量,故加上code,以节约RAM的空间。
其实code放在unsigned char 前也可以,比如code unsigned char dispbit[8]效果一样。

2.关于void T1zd(void) interrupt 3
“interrupt ”是单片机c语言中断关键字,至于后面的0,1,2,3,4,5,分别表示
0-外部中断0
1-定时器0
2-外部中断1
3-定时器1
4-串口中断
5-定时器2
“interrupt ”是单片机c语言中断关键字,是c51 语言在单片机中规定的,在程序编译时指明中断的类型。当相应的中断发生时,并执行这个中断函数。

本例中当定时器计数时间一到(即 TH1和TL1全部计满,并溢出 ),便执行下面程序,将0x1c放到 TH1中 0x18放到TL1 中,再开始重新计数(不断加1),每计满一次 LedNumVal值 加1。如此下去。。。
arndei
2011-03-01 · TA获得超过3794个赞
知道小有建树答主
回答量:1403
采纳率:0%
帮助的人:869万
展开全部
1.code 是把数组固定到ROM里面,而不是放在RAM里面,减少RAM的使用量,例如使用51单片机的时候如果数组大于256B,那么RAM就不够用了,所以把不会改变的数组放到ROM里面,当然,如果是会时常变化的数组,是不能固定到ROM中的;
2.都是这么用,应该是编译器设定的,你就当成是在KEIL编译器下编写51中断程序的模块吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
laserenqingwan
2011-03-02 · TA获得超过445个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:184万
展开全部
1,code的意思就是告诉编译器将这个一维数组做为常量存放在程序存储器ROM或flash里面
2,不用定义,直接写就好就像写调用的子程序一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Einstiphen
2011-03-02 · TA获得超过811个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:60.1万
展开全部
举个例子给你说明:
这个二进制数为0010000000010000
其中21H=00100000 20H=00010000

CLR C ;C清零
XCH A,21H ;交换A与21H的值,A=00100000
RRC A ;将A中值右移一位高位补0(C),A=00010000
XCH A,21H ;交换A与21H的值,21H=00010000
XCH A,20H ;交换A与20H的值,A=00010000
RRC A ;将A中值右移一位高位补0(C),A=00001000
XCH A,20H ;交换A与20H的值,20H=00001000

此时原二进制数变成了0001000000001000

可见:
1、程序完成的逻辑功能是使21H和20H中的16位二进制数右移一位,并使最高位为0,一般称为逻辑右移一位。
2、可以用MOV指令,修改后程序段如下:
CLR C
MOV A,21H
RRC A
MOV 21H,A
MOV A,20H
RRC A
MOV 20H,A
3、有所差别。虽然从16位右移功能来说两者的功能是相同的,但第一个程序段执行后,累加器A的内容仍维持原值,而第二个程序段执行后将改变A中的数值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2018-07-05 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38381
国家科技进步奖

向TA提问 私信TA
展开全部
空气传感器一般使用GP2Y1010AU0F,proteus里面是没有的,你可以用一个电位器来模拟,GP2Y1010AU0F传回的是一个模拟信号。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式