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

📄 m128uart.c

📁 ghc715金融读写卡机在下位单片机mega128下的读写程序。
💻 C
字号:

#include <iom128V.h> 
#include <macros.h>
#include <math.h>
#include <stdio.h>
#include <eeprom.h>
#define uchar unsigned char
#define uint unsigned int

#define Fosc   80000   //8M晶震
#define Baud   96      //9600拨特率
uchar temp[16];

void delay_10us(uint n)           //10延时函数
{
  unsigned int i,j;
  for(j=0;j<n;j++)
  {
   for (i=0;i<8;i++);   
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
  }
  WDR();
}

void delay_1ms(void)               //1ms延时函数
{ 
  unsigned int i;
  for (i=0;i<140;i++);
  WDR();    
}

void delay_nms(unsigned int n)     //延时n毫秒
{
  unsigned int i;
  n=n*8;
  for (i=0;i<n;i++)
  delay_1ms(); 
}
 





void uart1_init(void) 
{ 
	  CLI();                            
      UCSR0B|=(1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);      // RXEN1,TXEN1使能 
      UCSR0C = 0b00000110;                            // 8位数据传送 
      UBRR0H = (Fosc/(16*Baud)-1)/256;                //9600拨特率设置                                           
      UBRR0L = (Fosc/(16*Baud)-1)%256;   
}  

uchar Recvuart(void)                                  //接收数据
{     
      while(!(UCSR0A&0x80)); 
      return UDR0;
} 
    
uchar Recvuartintime(void)                            //有限时间接收数据
{
   uint i;
   i=10000;
   while(i--)
   {
    if(UCSR0A&0x80)
    break;
    asm("nop");
   }
   return UDR0;
}

void Senduart(uchar data)                              //有限时间发送数据
{     
    uint i;
	i=10000;
    UDR0=data;
	while(i--)
	{
     if(UCSR0A&0X40)
     break;
    }  
    UCSR0A|=0x40; 
}


  void Resetcard(void)  ////卡机复位
{
  uchar c;
  Senduart(0x7f);
  c=Recvuart();
  c=c&0x7f; 
  if(c!=':')
  while(1);	 
  c='P';
  Senduart(c);
  if(Recvuart()!='^') 
  while(1);
}

#pragma interrupt_handler UART0:19    
void UART0(void)                       //中断6采样卡机数据
{
      uchar i;
      uchar c;
	 
	  for(i=0;i<2;i++)
	  temp[i]=Recvuart();
	  asm("nop");
}
void intitmcu(void)
{ 
   uchar i,j;
   DDRF=0Xfc;
   PORTF=0XF0;
   DDRE=0X3F;
   PORTE=0XeF;
   DDRB=0XFF;
   PORTB=0XFF;
   DDRD=0XFF;
   PORTD=0XFF;
  
   uart1_init();  
   
  
   XMCRA = 0x0E; //external memory
   MCUCR = 0xC0;
   EICRA = 0x02; //extended ext ints
   EICRB = 0xA0; //extended ext ints
}


void main(void)  
{  
   float data;
   uchar i,c;
   intitmcu(); 
   SEI();
   delay_nms(1000);
   Senduart(0x1b); //卡机初始化
   Senduart(0x6a);
   delay_nms(1000);
   while(1)   
   { 
      delay_nms(100);
      Resetcard(); //卡机复位
   } 
} 

⌨️ 快捷键说明

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