头像-115431

大核桃

  • 黑龙江省哈尔滨市
  • 单片机
  • 消费电子

个人成就

获得 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已声明)

关于c8051f060内置CAN通信中消息对象清0程序

void clear_msg_objects(void) {     char old_sfrpage=SFRPAGE;     unsigned char i;     SFRPAGE = CAN0_PAGE;     CAN0ADR = IF1CMDMSK;            CAN0DATL = 0xFF;                 for (i=1;i

c8051f060在基于CAN通信中接收程序的问题

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

求助,关于c8051f060内置can通信

初入传感器生产企业,接到一个有关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这种非整形数据包,如何处理数据包的校验和?