导航:首页 > 操作系统 > h269a单片机

h269a单片机

发布时间:2022-07-08 03:01:39

⑴ 51单片机intrinsic.h怎么用

头文件就相当于一组自定义函数或者一些声明。其实没什么使用方法。你在使用include<aaa.h>时,就如同你把aaa.h中的内容全部复制到添加路径include<aaa.h>的地方。
具体我们看下面:

/*--------------------------------------------------------------------------
INTRINS.H
IntrinsicfunctionsforC51.
--------------------------------------------------------------------------*/
#ifndef__INTRINS_H__
#define__INTRINS_H__
#pragmaSAVE
#ifdefined(__CX2__)
#pragmaFUNCTIONS(STATIC)
/*,butneedstaticattribute*/
#endif
externvoid_nop_(void);
externbit_testbit_(bit);
externunsignedchar_cror_(unsignedchar,unsignedchar);
externunsignedint_iror_(unsignedint,unsignedchar);
externunsignedlong_lror_(unsignedlong,unsignedchar);
externunsignedchar_crol_(unsignedchar,unsignedchar);
externunsignedint_irol_(unsignedint,unsignedchar);
externunsignedlong_lrol_(unsignedlong,unsignedchar);
externunsignedchar_chkfloat_(float);
#ifdefined(__CX2__)
externintabs(int);
externvoid_illop_(void);
#endif
#if!defined(__CX2__)
externvoid_push_(unsignedchar_sfr);
externvoid_pop_(unsignedchar_sfr);
#endif
#pragmaRESTORE
#endif

以上是intrins.h的具体内容。


逐一分析。
1.#ifndef,#define,#endif
#ifndef __INTRINS_H__
#define __INTRINS_H__
#define qwerty
...
#define tyuio
#endif
这是一组。功能是条件编译。ifndef是if not defined,如果没有定义__INTRINS_H__,那咱们就定义吧,下一条就是#define __INTRINS_H__。一直到最后终止endif。
使用目的:如果编译时,系统已有intrins.h的定义,则不编译以下内容,若系统没有定义标识则编译内容。

例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:

#ifdefWINDOWS
#defineMYTYPElong
#else
#defineMYTYPEfloat
#endif

如果在Windows上编译程序,则可以在程序的开始加上#define WINDOWS
这样则编译命令行:#define MYTYPE long。
如果在这组条件编译命令之前曾出现以下命令行:#define WINDOWS 0
则预编译后程序中的MYTYPE都用float代替。这样,源程序可以不必作任何修改就可以用于不同类型的计算机系统。


(#pragma先略过)
2.extern
Extern用在变量/函数声明前,表明该变量/函数是在别处定义的。Extern void nop (void)表示其他地方有定义过函数nop(void),此处引用。
首先强调一点。头文件中的定义都不是全局变量,但是因为一直写在开头所以总是被最先编译。如果在xxx.h中定义int key,想在多个文件中使用A.c,B.h,…,编译不会通过。因为头文件中的内容如同照抄在include<xxx.h>处。即:在A和B中都定义了一次这个全局变量key(重复定义)。正确做法是在A.c中定义,在B.h中用extern+A.c中的定义,相反也行。
extern unsigned char _cror_ (unsigned char, unsigned char);表示声明一个叫_cror_ 的函数,两个参变量,返回unsigned char型的函数。等等。

_crol_字符循环左移
_cror_字符循环右移
_irol_整数循环左移
_iror_整数循环右移
_lrol_长整数循环左移
_lror_长整数循环右移
_nop_空操作8051NOP指令

说明一下,上面的这些函数虽然是外部定义的。但是很难找到定义的地点。可能在某个系统的dll文件中。使用时不必拘泥过多,直接使用就行。具体函数干些什么你也可以自己网络。这里不展开了。


3.#pragma
这是预编译指令,也可以叫编译器指令。初学者不必深究。换句话说,即使完全不理解也不影响你单片机的学习。
#pragma SAVE表示把当前设定放入保存堆栈。
#pragma RESTORE一直和SAVE组合使用,吧保存堆栈中的内容存储起来。他们是一组,一般共同使用。


还有剩余的一些其实就和上面讲的是一个类型。无非就是条件编译和预编译指令,和你关系不大这里就不展开了。

综合一下。看一个例子:

voidhahaha(inta,charb);//实际上你打开一个单片机的project,里面有reg51.h和intrins.h。这句话就如同intrins.h的功能,仅仅是声明。
main()
{
hahaha(qwe,rty);
}
voidhahaha(inta,charb);//这句话就如同reg51.h的功能,定义了一些函数。
{
a=a++;
b=b--;
}

当你include<reg51.h>include<intrins.h>后,就如同头文件的内容全部抄到你自己写的函数的最上面。

⑵ 设计一个单片机双机通信系统,并编写通信程序

串口调试助手是PC端的软件,用来从PC的串口发送和接收数据的。我们调试PC和单片机之间通讯的时候用来模拟PC端应用软件给单片机发送数据和接收单片机发送的数据的。你调试的是单片机和单片机之间的通讯,不适合用串口调试助手的。
但是单片机和单片机通讯不容易知道实际通讯的数据,所以存在很大的调试难度。如果条件允许的话,一般是通过单片机连PC串口,让PC模拟模块收发数据来验证串口通讯是否正常(PC端能够直接看到单片机发送的数据,从而判断程序是否符合同模块的通讯要求),再把PC换成模块进行通讯。这样调试比较方便。

你和模块通讯也是单纯的串口通讯。
我又仔细分析了一下你的系统,按你的意思应该是拿51单片机做上位机。习惯上我们把PC称为上位机,所以刚才没明白。

1、SMOD是用来给串口波特率硬件倍频的。在串口模式1,2,3下,如果SMOD=0波特率是4800,那么SMOD=1时波特率是9600。它存在的理由就是:如果要求的波特率非常快,在给定晶振条件下SMOD=0已经满足不了,才需要SMOD=1倍频。
比如你11.0592MHZ在SMOD=0时波特率最大28800bps达不到要求的57600bps,所以你要用SMOD=1倍频才能实现。
你串口要选择模式1,波特率是可变的,取决于定时器1的溢出速率:
波特率=(2SMOD÷32)×定时器1 溢出速率
通常会使用定时器1 工作在定时器工作模式2下,这时定时值中的TL1 做为计数,TH1 做为自动重装值 ,这个定时模式下,定时器溢出后,TH1 的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2 下定时器1 溢出速率的计算公式如下:
溢出速率=(计数速率)/(256-TH1) ;
计数速率= 11.0592M/12;
算了一下是TH1=255(#0FFH);就是计数器走一个计数周期。

2、你不用关心什么叫做数据包,只是一种形象的叫法。把一串数据作为一次通讯的内容,这一串数据就是一个包了。那个2位和4位只是写法上便于你理解的,
如01H +0000H + 01H + 03H + 0005H
对应上面的包格式解释0000H是地址码保留字0005H是校验和。
而串口通讯一帧只能发送一个字节。发送的时候只能 01H + 00H +00H + 01H + 03H + 00H + 05H 依序发送。
用汇编写的话流程就是 写入第一个字节01H到SBUF,等待直到TI=1,发送第二个字节00H,等待直到TI=1,发送第三个字节00H,如此循环直到发送完05H为止。

3、类似发送,应答8181H也是81H+81H两个字节回复的。可以用中断,也可以用查询。例如2的发送通讯中05H发送完之后就要开始查询RI直到RI=1,然后就把 SBUF中的字节读出来,是81H,清RI后再查询RI直到RI=1,把 SBUF中的字节读出来,是81H,清RI。如果判断两个接收的都是81H那就表明收包正确。

4、串口通讯一帧只能发送一个字节。这个就不是问题了。

+我hi交流,不留Q,不留程序。

⑶ 急求!!!哪位朋友指点下单片机程序题。。

ANL A, #17H; (A)=多少A是怎么算出来的求解

⑷ 单片机习题解答

39. RC A为循环左移指令(F ) 40.MOV A,30H为立即寻址方式( F ) 41.如果发生除法溢出错误,则PSW标志位P置1。(F ) 42.如JC rel发生跳转时,目标地址为当前地址加上偏移量rel( T ) 43..MOV A,@A+DPTR是一条查询指令( F ) 44.MUL AB的执行结果是高8位在A中,低8 位在B中( F ) 45.离散信号都是数字信号( F ) 46.在A/D变换时,抽样频率越高越好( F ) 47.CPU对内部RAM和外部RAM的读写速度一样快( F ) 48.对于8051单片机,当CPU对内部程序存储器寻址超过4K时,系统会自动在外部程序存储器中寻址( F) 49.外加晶振频率越高,系统运算速度也就越快,系统性能也就越好( F ) 50.(-86)原=11010110 (-86)反=10101001 (-86)补=10101010 ( T )
51.我们所说的计算机实质上是计算机的硬件系统与软件系统的总称。 ( T )
52.MCS-51的相对转移指令最大负跳距是127B。 ( T)
53.MCS-51的特殊功能寄存器分布在60H~80H地址范围内。( F )
54.要MCS-51系统中,一个机器周期等于1.5μs。( F,1us )
55、片内RAM与外部设备统一编址时,需要专门的输入/输出指令。( T )
56、MOV A, R0,这是寄存器寻址方式。 ( T )
57、8051单片机的P0口既可以做数据口线又可以做为地址口线 。 ( T)
58、CPU和外设之间的数据传送方式主要有查询方式和中断方式,两者相比后者的效率更高。 ( T)
59、8051内部有4K的程序存储器 ( F,8kB )
60、MCS-51单片机共有两个时钟XTAL1 和XTAL2 ( T )
61、五个中断源中优先级是高的是外部中断0,优先级是低的是串行口中断 ( T如果是8051单片机,8052就不对了 )
62、工作寄存器工作在0区,则R2 所对应的内部数据存储器的地址是03H 。( F)
63、MOVC A @A +DPTR ,这是条相对寻址指令 ( T )
64、8051单片机的P2口只能用作通用I/O 口 ( T )
65、程序存储器和数据存储器的作用不同,程序存储器一般用存放数据表格和程序,而数据存储器一般用来存放数据 ( T )
66、要进行多机通信,MCS-51串行接口的工作方式应为方式1。 ( F )
67、TMOD中的GATE=1时,表示由两个信号控制定时器的启停。 ( T )。
68、MCS-51外扩I/O口与外RAM是统一编址的。 ( F )。
69、使用8751且 =1时,仍可外扩64KB的程序存储器。( T)
70、8155芯片内具有256B的静态RAM,2个8位和1个6位的可编程并行I/O口,1个14位定时期等常用部件及地址锁存器。(T )
71、我们所说的计算机实质上是计算机的硬件系统与软件系统的总称。 ( T )
72、.MCS-51上电复位时,SBUF=00H。 ( F )。 SBUF不定。
73、使用可编程接口必须处始化。 ( T )。
74.8155的复位引脚可与89C51的复位引脚直接相连。( 不知道 )
75.MCS-51是微处理器。( F )不是。
76.MCS-51系统可以没有复位电路。( F)不可以。复位是单片机的初始化操作。
77.要MCS-51系统中,一个机器周期等于1.5μs。( F,12mhZ )若晶振频率屡8MHz,才可能为1.5μs
78.计算机中常作的码制有原码、反码和补码( T )
79.若不使用MCS-51片内存器引脚EA必须接地. ( T )

⑸ 单片机学习,请大家帮忙

;已知A=7AH,R0=30H,(30H)=A5H,PSW=80H,请按要求填写各指令的执行结果(每条指令均按已给定的原始数据进行操作)

;首先 先说一下 PSW寄存器(程序状态寄存器) 是一个8为特殊寄存器,它的各位包含程序执行后
;的状态信息 供程序查询或判别之用;
; 分别是是 CY(借,进) AC(铺进) F0 (用户标定) RS1 (寄存器选择)
; RS0 (寄存器选择) OV (溢出) - (保留) P (奇/偶)
;OV(PSW.2) 溢出标志位 。当进行补码运算时 如果有溢出。即超出-128~127的范围时
;或者 进行加减运算时 超过 8位二进制(255)
;OV由硬件自动置一,无溢出时为0
ORG 0000H
MOV A ,#7AH ;OV=0;
MOV R0,#30H ;0V=0;
MOV 30H,#0A5H ;OV=0;
MOV PSW,#80H ;(OV=0) CY=1;J进位为1;
ADD A,R0 ;(OV=(1) CY=0;07AH+30H=AAH (十进制=170) 故 A=AAH因为有溢出

ADD A,30H ;(OV=1) CY=1; AAH+A5H=14F (335) 现在A=14F(335)已经超过8位最大值FFH(255)
;故 A有溢出 OV=1; A=14FH(335)-FFH(255)-CY=4FH(79);
ADD A,#30H ;;(OV=0) 因为现在 A=4FH(79)+30H (48)=7FH(127) 小于FFH(255) OV=0; CY=0
ADDC A,30H ; (OV=0) CY=1 ;7FH(127)+A5H=123H(291)-FFH(255)=24H()
SUBB A,30H ; (OV=0) A=7EH
SUBB A,#30H ; (OV=0) A=4DH
SJMP $

end

⑹ 单片机中 A=4EH,B=5DH,MUL AB 怎么计算的结果是AB=1C56H怎么来的

列算式就可以知道怎么得到的了:
01001110 ;A=4EH,
01011101 ;B=5DH,
------------------------;x;MUL AB
01001110
00000000
01001110
01001110
01001110
00000000
01001110
00000000
---------------------------------------------
0001110001010110
四位一组 0001 1100 0101 0110B,即1C56H。
其实乘法就是移位再累加。

⑺ 单片机 ORL C,/H是什么意思

单片机中 ORL C,/H的意思是将借位C与“位变量”H取反后进行“逻辑或”运算。
布尔操作指令ORL 为逻辑或的意思
C是状态寄存器PSW的PSW.7位,借位或进位标志
/H,是用户自定义的位变量,地址为是20H~2FH中的某一位。

⑻ 单片机原理,"ANL A , # 0F H "这条"与"指令的作用

这条指令的作用是将累加器A的高四位屏蔽掉,保留低四位。

⑼ 单片机,10000H-7DH怎么计算的求详细计算过程

1

2

3

51

单片机

C

语言程序(二)定时

/

计数器

中断

程序一

利用定时

/

计数器

T0

P1.0

输出周期为

1s

的方波,

让发光二极管以

1HZ

闪烁,

#include<reg52.h>

//52

单片机头文件

#include<intrins.h>//

包含有左右循环移位子函数的库

#defineuintunsignedint

//

宏定义

#defineucharunsignedchar

//

宏定义

sbitP1_0=P1^0;

uchartt;

voidmain()

//

主函数

{

TMOD=0x01;//

设置定时器

0

为工作方式

1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//

开总中断

ET0=1;//

开定时器

0

中断

TR0=1;//

启动定时器

0

while(1);//

等待中断产生

}

单片机系统开发,2021最新报价!立即围观!

广告单片机系统开发意法半导体包含广泛产品线包含低成本8位单片机和具备丰富外设选择的单片机系统开发单片机。查看详情 >

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==20)

{

tt=0;

P1_0=~P1_0;

}

}

程序二

利用定时

/

计数器

T1

产生定时时钟

,

P1

口控制

8

个发光二极管

,

使

8

个指示灯依次一个一个闪动,

闪动频率为

10

/

(8

个灯依次亮一遍为一个周期

)

,循环。

#include<reg52.h>

//52

单片机头文件

#include<intrins.h>//

包含有左右循环移位子函数的库

#defineuintunsignedint

//

宏定义

#defineucharunsignedchar

//

宏定义

华清远见c语言单片机,新手入门-实战教学,嵌入式开发

广告c语言单片机,华清远见自主研发,软硬件结合教学,毕业相当于拥有1-3年工作经验。查看详情 >

sbitP1_0=P1^0;

uchartt,a;

voidmain()

//

主函数

{

TMOD=0x01;//

设置定时器

0

为工作方式

1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//

开总中断

ET0=1;//

开定时器

0

中断

TR0=1;//

启动定时器

0

a=0xfe;

while(1);//

等待中断产生

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==2)

{

tt=0;

网络安全OTA-专业,可靠的单片机ota,初创企业免费申领

广告2万台设备OTA额度面向初创企业【免费开放】,为企业降低OTA成本,提高设备安全系数。查看详情 >

P1=a;

a=_crol_(a,1);

}

}

程序三

同时用两个定时器控制蜂鸣器发声,

定时器

0

控制频率,定时器

1

控制同个

频率持续的时间,间隔

2s

依次输出

1

10

50,100

200,400,800,

1k

hz

)的方波

#include<reg52.h>

//52

单片机头文件

#include<intrins.h>//

包含有左右循环移位子函数的库

#defineuintunsignedint

//

宏定义

#defineucharunsignedchar

//

宏定义

sbitbeep=P2^3;

uchartt;

uintfre,flag;

voidmain()

//

主函数

{

fre=50000;

活字格-企业级低代码开发平台,软博会获奖产品

广告可视化设计,快速开发企业Web应用,帮助用户快速构建支持移动端的企业级应用程序,满足企查看详情 >

beep=0;

TMOD=0x11;//

设置定时器

0,

定时器

1

为工作方式

1

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;//

开总中断

ET0=1;//

开定时器

0

中断

ET1=1;

TR1=1;

TR0=1;//

启动定时器

0

while(1);//

等待中断产生

}

voidtimer0()interrupt1

//

定时器

0

中断

{

TR0=0;

//

进中断后先把定时器

0

中断关闭,防止内部程序过

多而造成中断丢失

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

tt++;

if(flag<40)

//

以下几个

if

分别用来选取不同的频率


等,希望以上内容能对你有所帮助、。

阅读全文

与h269a单片机相关的资料

热点内容
温州直播系统源码 浏览:110
程序员在上海买房 浏览:382
生活解压游戏机 浏览:907
季羡林pdf 浏览:716
php支付宝接口下载 浏览:814
ipad怎么把app资源库关了 浏览:301
量柱比前一天多源码 浏览:416
电子书app怎么上传 浏览:66
国家反诈中心app注册怎么开启 浏览:804
全波差分傅里叶算法窗长 浏览:41
程序员如何讲自己做过的项目 浏览:7
程序员要看的书颈椎 浏览:946
php文章cms 浏览:553
CSS权威指南第三版PDF 浏览:496
android怎么搭建框架 浏览:184
正宗溯源码大燕条一克一般多少钱 浏览:917
电脑感染exe文件夹 浏览:916
wpsppt怎么转pdf格式 浏览:88
腾讯文档在线编辑怎么添加密码 浏览:880
本地不能访问服务器地址 浏览:865