大核桃
获得 1 次赞
帮助过0人
用天翔老师的板子写了一个定时计数程序,使用导线接触T0引脚计数,每隔一秒钟刷新一次从0开始,程序如下: #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar num1,flag1s; uint val; void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void init() { TMOD=0x15; TH0=0; TL0=0; TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR0=1; EA=1; ET1=1; TR1=1; } void display(uchar bai,uchar shi,uchar ge) { dula=1; P0=table[bai]; dula=0; wela=1; P0=0xfe; wela=0; delay(5); dula=1; P0=table[shi]; dula=0; wela=1; P0=0xfd; wela=0; delay(5); dula=1; P0=table[ge]; dula=0; wela=1; P0=0xfb; wela=0; delay(5); } uint read() { uchar t1,th1,th2; uint val; while(1) { th1=TH0; t1=TL0; th2=TH0; if(th1==th2) break; } val=th1*256+t1; return val; } void main() { uchar a,b,c; uint num; init(); while(1) { num=read(); if(flag1s==1) { TH0=0; TL0=0; flag1s=0; num=0; } a=num/100; b=num%100/10; c=num%10; display(a,b,c); } } void time() interrupt 1 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; num1++; if(num1==20) { num1=0; flag1s=1; } } 其中主函数中的大循环: while(1) { num=read(); if(flag1s==1) { TH0=0; TL0=0; flag1s=0; num=0; } a=num/100; b=num%100/10; c=num%10; display(a,b,c); } 请问为什么当我在此大循环中加入 num2=num; 这句时,每秒刷新一次从零开始就失效了呢?(num2已声明)
void clear_msg_objects(void) { char old_sfrpage=SFRPAGE; unsigned char i; SFRPAGE = CAN0_PAGE; CAN0ADR = IF1CMDMSK; CAN0DATL = 0xFF; for (i=1;i
1,在发送程序中,将消息编号(MsgNum)写入IF1命令请求寄存器后,数据被发出,请问在接收程序中,如何通过消息编号相关的子函数,取出数据。 2,消息编号在CAN通信中都有哪些作用?是如何工作的?本人水平较低,希望各位可以提供相关代码参考。 我所学习的代码如下: CAN启动程序: void start_CAN(void) { SFPRAGE=CAN0_PAGE; CAN0CN丨=0x41; CAN0ADR=BITREG; CAN0DAT=0x49c2; CAN0CN丨=0x06; CAN0CN&=~0x41; } 发送程序: void transmit(char MsgNum) { uchar num; SFRPAGE=CAN0_PAGE; CAN0ADR=IF1CMDMSK; CAN0DAT=0x0087; CAN0ADR=IF1DATA1; for(num=0;num
初入传感器生产企业,接到一个有关can通信的项目,请问各位如何能快速学习c8051f060内置can通信?由于本人水平较低,仅停留在天祥老师的10天学会单片机水平,求各位朋友能推荐一下适合我学习的相关资料,视频最好,或者通过哪些渠道可以进行这方面的学习?
初入传感器生产企业,对于单片机的水平仅为天翔老师的10天学会单片机层次,下面的代码是一款传感器有关于数据包的编程部分,有几个问题想请教下。 union { // 静态共用体send_pack unsigned char buf[15]; // 数据包共15位 struct { unsigned char start0; // 包头0 0x1d unsigned char start1; // 包头1 0x1d unsigned char command; // 指令码 unsigned char len; // 数据长度 float d_ar; // 方向角 float d_bt; // 高低角 unsigned char chksum; // 校验码 unsigned char end0; // 包尾0 0x1e unsigned char end1; // 包尾1 0x1e }member; }send_pack; // 共用体send_pack定义结束 请问union,struct,member,send_pack这几个单词分别代表什么意思?在这段代码中的作用是什么?
刚刚进入传感器生产企业,对51单片机的认识只限于天祥老师的10天学会单片机水平,今天在论坛得到了很多朋友的帮助,解决了很多的困惑,目前我对如何通过串口通信发送带小数点的(要求精确到小数点后两位)数据有一些疑惑,希望各位朋友帮助。 1,【转换成整型,根据你要的浮点精度来处理,*10、*100,在接收端再转成小数。】这句话没看明白,请问这里的转换思路是什么,具体该用什么方法?如果目的是发送8位AD采集的数据,那如何将此8位char型数据根据此方法处理? 2,如果采用的8位以上的AD采集的数据,那应该如何处理? 由于我的水平不高,因此问题中可能会有描述不清的地方,麻烦各位朋友指出。
刚刚进入传感器生产企业,对51单片机的认识只限于天祥老师的10天学会单片机水平,关于串口通信问题有一些疑惑,希望传感器行业的朋友能够帮忙解答,如果有问的不明白的地方,希望各位朋友指出。非常感谢。 1,请问在串口通信中,数据包的帧头和帧尾(比如0x55,0xaa)是怎样加入到数据包的?是不是定义一个数组,将帧头和帧尾设置成0x55,0xaa,再将整个数组发送?在发送包含帧头帧尾的数据包时,是否需要在发送端发送时,即校验帧头帧尾?还是只需要在接收端校验帧头帧尾即可? 2,请问在串口通信中,如果需要发送如3.13这样的非整形数据,该如何实现?是由发送端进行处理,还是由接收端接收数据后再进行处理? 3,如果发送端发送3.13这种非整形数据包,如何处理数据包的校验和?