📄 basiccan_final1.lst
字号:
600 1 SJA_BCANAdr=REG_CONTROL;//设置控制寄存器,在操作模式进行
601 1 *SJA_BCANAdr=0X1E;//开启溢出中断、错误中断、发生和接收中断
602 1
603 1 return status;
604 1 }
605
606
607
608 void main()
609 {
C51 COMPILER V6.23a BASICCAN_FINAL1 09/20/2008 12:27:03 PAGE 11
610 1 delay(100);
611 1
612 1 IT0=0;//外中断0为电平触发方式
613 1
614 1 TMOD=0x60;//计数器1以工作方式2工作,以TR1启动定时器
615 1 TH1=0xFF;
616 1 TL1=0xFF;//一次计数则中断(T1负跳变时计一次)
617 1 TR1=1;//启动计数
618 1
619 1 ET1=1;//允许计数器1中断
620 1
621 1 EX0=1;//允许外中断0中断
622 1
623 1 EA=1;//中断总允许
624 1
625 1 if(SJA_1000_Init()==0)
626 1 dispbuf=0;//表示初始化成功
627 1 else
628 1 dispbuf=1;
629 1
630 1 while(1)
631 1 {
632 2 display(dispbuf);
633 2 }
634 1
635 1 }
636
637
638
639 //该函数现实键盘扫描,去抖动,实现要求功能
640 void keyboard() interrupt 3 using 0
641 {
642 1 static uchar num_send=0;//定义一个静态变量,并初始化为0,用于计算S1键按下的次数,即要发送的数据
643 1 static uchar ADC_send=0;
644 1 static uchar num_rate=0x0D;//用于记录S3按下的次数,从而智能的选择波特率
645 1 uchar key_code;//用于存储所按下的键值
646 1 ET1=0;//关闭计数器1中断
647 1 delay(20);//去抖动,等待20ms
648 1 if(!T1)
649 1 {
650 2 key_code=P1&0x0F;//读取P1口的前4位,即P10-P13
651 2 switch(key_code)
652 2 {
653 3 case 0x0E://按下S1键的情况:设置发送数据,每按一次加1
654 3 // EX0=0;//关闭外中断0
655 3 num_send++;
656 3 dispbuf=num_send;//将num_send转化为可以显示的十进制数,并存入SetSystemBuf中
657 3 break;
658 3
659 3 case 0x0D://按下S2键的情况:将设置好的数据发送出去
660 3 //EX1=0;//关闭外中断1
661 3 send_data[0]=0x01;//标识符为1010 1010 000
662 3 send_data[1]=0x04;
663 3 send_data[2]=num_send;
664 3 BCAN_DATA_WRITE(send_data);//将数据存放到REG_TxBuffer
665 3 delay(10);
666 3 BCAN_CMD_PRG(TR_CMD);//发送数据到CAN总线上,成功是否在中断判断
667 3 dispbuf=num_send;
668 3 num_send=0;//复位发送的数据
669 3 // EX0=1;//开外中断0
670 3 break;
671 3
C51 COMPILER V6.23a BASICCAN_FINAL1 09/20/2008 12:27:03 PAGE 12
672 3 case 0x0B://按下S3键的情况:设置波特率
673 3 //EX1=0;//关闭外中断1
674 3 num_rate--;
675 3 BCAN_ENTER_RETMODEL();//使CAN控制器进入复位工作模式
676 3 BCAN_SET_BANDRATE(num_rate);//设置波特率
677 3 dispbuf=band_rate[num_rate];
678 3 BCAN_QUIT_RETMODEL();//使CAN控制器退出复位工作模式
679 3 if(!num_rate)
680 3 num_rate=0x0D;
681 3 break;
682 3
683 3 case 0x07://按下S4的情况:开始接收AD的数据并显示
684 3 OE=0;
685 3 ST=0;
686 3 ST=1;
687 3 ST=0;
688 3 OE=1;
689 3 dispbuf=P0;
690 3 ADC_send=P0;
691 3 OE=0;
692 3
693 3 send_data[0]=0x01;//标识符为1010 1010 000
694 3 send_data[1]=0x21;
695 3 send_data[2]=ADC_send;
696 3 BCAN_DATA_WRITE(send_data);//将数据存放到REG_TxBuffer
697 3 delay(10);
698 3 BCAN_CMD_PRG(TR_CMD);//发送数据到CAN总线上,成功是否在中断判断
699 3
700 3 // dispbuf=7;//显示P,表示推出复位
701 3 //EX1=1;//开外中断1
702 3 break;
703 3 default:
704 3 break;
705 3 }
706 2 }
707 1 ET1=1;//开计数器中断
708 1 }
709
710 //该中断实现接收显示,并当出现错误是给予显示:
711 void SJA_int() interrupt 0 using 3
712 {
713 1 uchar reg_int; //存放中断寄存器的数据
714 1 uchar rcv_buf[10];//接收数据存储
715 1 EX0=0;//关闭外中断0
716 1 SJA_BCANAdr=REG_INTERRUPT;//读取中断寄存器的数据
717 1 reg_int=*SJA_BCANAdr;
718 1
719 1 if(reg_int&0x01) //接收中断处理
720 1 {
721 2 BCAN_DATA_RECEIVE(rcv_buf);
722 2
723 2 dispbuf=rcv_buf[2];//显示数据
724 2 // display();
725 2 //SetSystemBuf[1]=rcv_buf[3];
726 2 //SetSystemBuf[2]=rcv_buf[4];
727 2 //SetSystemBuf[3]=rcv_buf[5];
728 2 BCAN_CMD_PRG(RRB_CMD);//释放接收缓存区
729 2 P14=1;
730 2 P15=1;
731 2 P17=1;
732 2 P0=~dispbitcode[10];
733 2 P17=0;
C51 COMPILER V6.23a BASICCAN_FINAL1 09/20/2008 12:27:03 PAGE 13
734 2 delay(500);
735 2 }
736 1 else if(reg_int & 0x02)
737 1 {
738 2 P14=1;
739 2 P15=1;
740 2 P17=1;
741 2 P0=~dispbitcode[17];
742 2 P17=0;
743 2 delay(500);
744 2 // dispbuf=17;//若是发送中断,则显示H,表示发送成功
745 2 }
746 1
747 1 else if(reg_int & 0x04)
748 1 {
749 2 P14=1;
750 2 P15=1;
751 2 P17=1;
752 2 P0=~dispbitcode[16];
753 2 P17=0;
754 2 delay(500);
755 2 //dispbuf=16;//若是错误中断,则显示-,表示有错误产生
756 2 }
757 1
758 1 else if(reg_int & 0x08)
759 1 {
760 2 P14=1;
761 2 P15=1;
762 2 P17=1;
763 2 P0=~dispbitcode[19];
764 2 P17=0;
765 2 delay(500);
766 2
767 2 //dispbuf=19;//若是数据溢出中断,则显示L,表示有数据溢出中断
768 2 }
769 1
770 1 else
771 1 {
772 2 P14=1;
773 2 P15=1;
774 2 P17=1;
775 2 P0=~dispbitcode[18];
776 2 P17=0;
777 2 delay(500);
778 2
779 2 //dispbuf=18;//表示唤醒中断,显示P
780 2 }
781 1
782 1
783 1 EX0=1;//开外中断0
784 1 }
785
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1238 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 18
IDATA SIZE = 36 ----
BIT SIZE = ---- ----
C51 COMPILER V6.23a BASICCAN_FINAL1 09/20/2008 12:27:03 PAGE 14
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -