⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用单片机实现(载波监听/冲突检测)的功能
💻 C
📖 第 1 页 / 共 5 页
字号:
/***********************************************************************************
*宁波不良品程序操作说明: 上电--按ENT键启动程序--按1-8键选择不良品类型--按ENT确认不良品
*
*  功能键:  一、按9键+mode键    设置波特率     
*            二、按9键+CLR键     清零不良品数据
*            三、EXIT键          退出闪烁状态
             四。本机地址        ‘_'
一、按9键+mode键    设置波特率     
*            二、按9键+CLR键     清零不良品数据
*            三、EXIT键          退出闪烁状态
             四。本机地址        ‘_'

************************************************************************************/

//#include "io430.h"
#include "io430x13x.h"
#include "in430.h"
#include <stdlib.h>




#define  Address        'A'                     //本机地址
//#define  _Project1                              // 工数= number
#define  _Project2                               工数= number*Target/ConvertCode
unsigned char const AddressIndex[] ={'A','B','C','D','E','F','G','H','I','J','K',
                                     'L','M','N','O','P','Q','R','S','T','U','V','W',
                                     'X','Y','Z','a','b','c','d','e','f','g','h','i',
                                     'j','k','l','m','n','o','p','q','r','s','t','u',
                                     'v','w','x','y','z'
                                    };



unsigned char const LedCode[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00};      //数码管显示代码



unsigned char const DisplayCode[11] = {0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A};
unsigned char const KeyCode[16]     = {0X07,0X08,0X09,0X0F,0X04,0X05,0X06,0X0E,0X01,0X02,0X03,0X0D,0X00,0X0A,0X0B,0X0C};
unsigned char const SelectLed[8]    = {0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
unsigned char const CodeTable[][9]  = {{'|','|','?',':','*','~'},                                   //主控端通信忙 
                                       {Address,Address,'<','B','U','S','E','N','~'},                               //有地址的子台 ,总线申请允许 | 非地址的子台,子台安静
                                       {'|','|', '<','B','U','S','F','R','~'},                      //总线空闲,可以允许总线申请
                                       {Address,Address,'1','~'},                                                   //数据接收完毕
                                       {Address,Address,'0','~'},                                    //数据发送错误指令
                                       {Address,Address,'>','0','1','?',':','*','~'},                //异常灯点亮指令
                                       {Address,Address,'>','0','2','?',':','(','~'}                 //异常灯点灭指令  
                                      };                

unsigned char const AsciiTable[]     = {0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};    //ASCII编码表

const unsigned char       ProtoCodeCon[]   = {'<','{','?',':','*','~'};                        // 子台向PLC申请总线
const unsigned char       CorrectCode[3]   = {'1','~'};                                        //子台通信结束指令
const unsigned char       ReTxdData[3]     = {'0','~'};                                        //子台要求重发指令


const unsigned char       SwitchOnCode[6]      = {'0','1','?',':','*','~'};                    //工位异常开启
const unsigned char       SwitchOffCode[6]     = {'0','2','?',':','+','~'};                    //工位异常解除
const unsigned char       SwitchInitCode[6]    = {'0','0','?',':',')','~'};                    //工位强制复位

unsigned long const Baud[]           = {115200,76800,57600,38400,19200,9600,4800};
unsigned char const BaudRate[][3]    = {{0x22,0x00,0xED}, {0x34,0x00,0x40}, {0x45,0x00,0x4A}, {0x68,0x00,0x40},
                                       {0xD0,0x00,0x40}, {0xA0,0x01,0xC0}, {0x41,0x03,0x00}};
unsigned char       ReceviceBuff[20];                         //数据接收缓冲器  
unsigned char       TransmitBuff[2];                         //数据包打包格式数组缓冲器
unsigned char       TotalProTemp[9][4];                       //用于数据拆包临时变量

unsigned char       DisplayKeyCode[12];                       //段显示变量

unsigned int        TotalPro[10];                             //不良品数累计数
unsigned int        TimeSec1[25][2];                          //第一时间段数组
unsigned int        TimeSec2[9][2];                           //第二时间段数组]
unsigned char       TimeSectionIndex;                         //时间段索引
unsigned char       SecIndex;                                 //段索引
unsigned char       TimeIndex;                                //时间索引          
unsigned int        CovertVar;                                //段显码转换变量
unsigned char       Key;                                      //按键                 
unsigned char       KeyTemp;                                  //临时按键
unsigned int        Flag;                                     //标志变量
unsigned int        UartFlag;                                  //标志变量
signed   char       i;                                        //变量i 
unsigned char       count;                                    //记数
unsigned char       Index;                                    //波特率选择
unsigned char       UartCount=0;                              //波特率记数
unsigned char       UartCounter=0;                            //用于波特率记数1
unsigned char       CheckSum;                                 //校验和
unsigned char       TimerCount;                               //定时器记数
unsigned char       CommunicationErr;                         //通信错误变量

unsigned char       ClockCount;                               //定时时钟记数
unsigned char       Second;                                   // 秒
unsigned char       Min;                                      //分
unsigned char       Hour;                                     //小时
unsigned char       DisplayCodeTemp[4];                       //临时数据数组
unsigned long       DisplayFlg;                               //用于显示的标志
unsigned int        ConvertCode=0;
unsigned int        Plan;                                     //计划
unsigned int        WatchRecevice;                            //目标
unsigned int        Real;                                     //实绩
unsigned int        Number;                                   //工数
unsigned int        SelfAddress;                              //本机地址变量
signed   int        ScaleClock;                               //时钟设定标尺

unsigned int       temp;                                      //临时变量
unsigned char      temp1;                                     //临时变量
unsigned int       CounterForNumber;                          //工数记数器                            
unsigned char      Counter;                                   //时钟记数器
signed   char      SearchIndex;                               //查询索引

unsigned char      ConflictFlag;                              // 冲突标志

unsigned char      SoundTone;
unsigned char      BaudBit;
unsigned char      m_AddressIndex;
unsigned char      ReciveTimer;




                              



#define  Baud1     115200                      //波特率12
#define  Baud2     76800                       //波特率2 
#define  Baud3     57600                       //波特率2
#define  Baud4     38400                       //波特率3
#define  Baud5     19200                       //波特率4
#define  Baud6     9600                        //波特率5
#define  Baud7     4800                        //波特率6

#define  Key0      0X0C                        //数字键0
#define  Key1      0X08                        //数字键1
#define  Key2      0X09                        //数字键2
#define  Key3      0X0A                        //数字键3
#define  Key4      0X04                        //数字键4
#define  Key5      0X05                        //数字键5
#define  Key6      0X06                        //数字键6
#define  Key7      0X00                        //数字键7
#define  Key8      0X01                        //数字键8
#define  Key9      0X02                        //数字键9
#define  MODE      0X0D                        //功能键 MODE 用于波特率的设定
#define  EXIT      0X0E                        //功能键 EXIT 用于程序的退出
#define  ENT       0X0F                        //功能键 ENT  用于确认
#define  CLR       0X0B                        //功能键 CLR  用于清除
#define  DOWN      0X07                        //功能键 DOWN 用于点减
#define  UP        0X03                        //功能键 UP   用于增加


 
//Flag标志
#define  SwitchOn       0X01                    //异常开关开启
#define  SwitchOff      0X02                    //异常开关解除

#define  ResetFlg       0X10
#define  BandSetFlg     0X20                    //波特率设定标志
#define  StartFlg       0X40                    //启动不良品检测标志
#define  BaudSet        0X80                    //指令错误
#define  LCJ            0X100                   //闪烁标志1
#define  ShrinkFlg_2    0X200                   //闪烁标志2
#define  FunClrFlg      0X400                   //启动功能键
#define  ReceiveFinish  0X800                   //接受指令字完成标志
#define  RUNFlg         0X1000                  //CLR键被按下的标志
#define  LowPowerFlg    0X2000                  //闪烁标志3
#define  ReceiveDataFlg 0X4000                  //接收数据标志
#define  LOWFlg         0X8000                  //低位转换标志


//UartFlag标志
#define  LinkHandFlg    0X01                     //通信握手标志
#define  ResetDataFlg   0X02                     //读指令字
#define  WriteFlg       0X04                     //读指令字
#define  ServerBusy     0X08                     //指令结束格式 ?
#define  Format_2       0X10                     //指令结束格式 :
#define  Format_3       0X20                     //指令结束格式 ~
#define  CheckOk        0X40                     //指令校验正确标志
#define  SendDataFlg    0X80                     //发送数据指令

#define  BUSENABLEFLG   0X100                    //总线申请通过
#define  CONFLICTFLG    0X200                    //总线冲突


//Conflict标志
#define  LINKSENDFLG    0X01                    //总线申请发送完毕
#define  NEEDCOMM       0X02                   //子台有通信需求
#define  SENDENABLE     0X04                    //子台发送允许.总线释放
#define  SENDDISABLE    0X08                   //子台发送不允许,总线使用中..
#define  HASLINKEDFLG   0X10                   //已经与PLC建立链接



#define  ErrCodeFlg     0X20                    //总线上乱码

//CommunicationErr标志
#define  ReSendErr      0X01                    //发送重发指令丢失
#define  SendDataErr    0X02                    //发送数据指令丢失
#define  ConfirmErr     0X03                    //发送正确接收指令丢失
#define  LinkHandErr    0X04                    //发送总线请求指令丢失
#define  STATESENDERR   0X05                    //发送开关信息指令丢失                       
#define  FREEBUSERR     0X06                    //总线释放指令丢失



//新加入的宏定义
#define  MaxCount       9999                       //显示的最大值
#define  ShiftCode      0X80                       //串行转换码
#define  BaudDefault    0X05                       //设定默认波特率为  19200


//用于显示标志位
#define  DShrSetFlg          0X01                     //第二行闪烁标志
#define  DShrinkFlg          0x02                     //数据超范围闪烁标志
#define  DClockFlg           0X04                     //设置时钟标志
#define  PlanSetFlg          0X08                     //计划设定标志
#define  NumSetFlg           0X10                     //工数设定标志
#define  FirstFlg            0X20                     //闪烁处理标志
#define  ClockSetFlg         0X40                     //时钟设定标志
#define  ErrFlg              0X80                     //出错标志
#define  AddressSetFlg       0X100                    //本机地址设定标志
#define  StartShrinkFlg      0X200                    //启动闪烁标志
#define  TimeSection1SetFlg  0X400                    //第一班时间设定
#define  TimeSection2SetFlg  0X800                    //第二班时间设定
#define  TimeIndexFlg        0X1000                   //时间检索标志
#define  AutoCounterFlg      0X2000                   //自动时间检测标志
#define  ChangeWorkFlg       0X4000                   //换班标志
#define  CheckTimeFlg        0X8000                   //比较标志
#define  TimeFirstFlg        0X10000                  // 时间第一次标志

#define  P15DelayFlg         0X20000                  //实绩开关延时标志
#define  P16DelayFlg         0X40000                  //启动开关延时标志




#define  ShrinkFlg_1         0X00ff                    //无效标记
  


void Init(void);                                                   //初始化
void ReadBuzz();                                                   //读dip 
void SysInit(void);                                                //系统初始化
void Delay10ms(int num);                                           //延时程序
void Clock();
void SetBaud(int baud);                                            //波特率设定
void Disper(void);                                                 //高位0消隐
void Disapper(void);
void DisplayLed(void);                                              //显示LED
void SendData(const unsigned char * ,unsigned char );               //发送数据
//unsigned char  DataPack(void);                                      //数据打包处理
unsigned char  CovertToAsc(void);                                   //转换到ASCII
void FlashWrite(unsigned int TotalPro[]);                           //保存数据到闪存
void FlashRead(void);
unsigned char FlashBusy(void);                                                             
void FlashErase(unsigned int);                                  
void ConvertData(int data);
void ConfirmData();                                                  //确认数据的合法性



void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                                         //关闭看门狗
  //FlashRead();                                                      //读地址为0X1080的数据
  for(i=0; i<12; i++)
  {
    DisplayKeyCode[i] =LedCode[0];                                  //初始显示为0   
  }
  for(i=0; i<10; i++)
    TotalPro[i] = 0;
  Init();
  
  while(1)
  {
    /*if((P6IN & P6IN_4) != P6IN_4)                          //如果掉电进入掉电处理        
   {
     Flag |= LowPowerFlg;
     DisplayFlg &= ~FirstFlg; 
     if((DisplayFlg & FirstFlg) == FirstFlg)
     {
        TACCTL0 &= ~CCIE;                                   //不允许定时器A中断
        TBCTL   = TBSSEL_1 + MC_1;                          //定时器B 32768HZ 中断
        TBCCTL0 = CCIE;                                     //定时器B 中断允许
        TBCCR0  = 32768;                                    //定时时间1s
        LPM3;
     }
   }*/
   
  
    
   /* if((Flag & ReceiveDataFlg) == ReceiveDataFlg)                        //接受上位机数据后,解包的处理
    {
      _DINT();
      unsigned char Counter;
      unsigned char ii=0;
      signed   char j=0;
      unsigned int  k=0;
      unsigned int  digital=0;
      CheckSum=0;
      for(ii=0; ii<9; ii++)
      {
        for(j=0; j<4; j++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -