|
#include <iom128v.h>
#include "mainboardtest.h"
#pragma interrupt_handler usart0_receive_int:19
unsigned char state;
unsigned char getright_state;
void delay_nNOP(unsigned int n)
{
unsigned int i=0;
for(i=0; i<n; i++)
nop();
}
void delay_10us(void)
{
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();
}
void delay_n10us(unsigned int n)
{
unsigned int i=0;
for(i=0; i<n; i++)
delay_10us();
}
void delay_1ms(void)
{
unsigned int i;
for(i=0; i<100; i++)
delay_10us();
}
void delay_nms(unsigned int n)
{
unsigned int i=0;
for(i=0; i<n; i++)
delay_1ms();
}
/*******************************************
定义IO口
******************************************/
void port_init(void)
{
DDRC = 0xff; //PC输入,P3口按键输入
PORTC = 0x00; //将PC输入口加上拉电阻
}
void USART0_Init()
{
unsigned char middle;
middle = SREG;
CLI(); //清除中断
UCSR0B |= (1<<RXCIE0); //接收结束中断使能
UCSR0B |= (1<<TXCIE0); //发送结束中断使能
UCSR0B |= (1<<RXEN0); //接收使能
UCSR0B |= (1<<TXEN0); //发送使能
UCSR0C &= ~(1<<UMSEL0);//USART 模式选择,0异步,1同步, 异步
UCSR0C &= ~(1<<UCPOL0);//时钟极性,使用异步模式时,将这一位清零
UCSR0C &= ~(1<<UPM01); //奇偶校验模式,
UCSR0C &= ~(1<<UPM00); //奇偶校验模式,0,0 禁止
UCSR0B &= ~(1<<UCSZ02); //字符长度
UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);//字符长度011 8位
UCSR0C |= (1<<USBS0); //停止位选择,0,一位停止位,1两位停止位
UBRR0L = 103; //波特率:9600pbs
SREG = middle;
SEI(); //开总中断
}
void USART0_TxD(unsigned char data)
{
//wait for empty transmit buffer
while(!(UCSR0A&(1<<UDRE0)));
//put data into buffer,sends the data
UDR0=data;
}
unsigned char usart0_receive_bity()
{
while (!(UCSR0A&(1<<RXC0)));
return UDR0;
}
/**********USART0**********/
void usart0_receive_int()
{
unsigned char data,middle;
middle = SREG;
CLI();
data = usart0_receive_bity();
if(data == 0x01)
{
getright_state = 1;
}
if(data == 0x02)
{
getright_state = 2;
}
if(data == 0x03)
{
getright_state = 3;
}
if(data == 0x04)
{
getright_state = 4;
}
SREG = middle;
SEI();
}
void INIT_DEVICE(void)
{
unsigned char cSREG;
cSREG =SREG;
CLI();
port_init();
USART0_Init();
SREG = cSREG;
SEI();
}
void main()
{
getright_state = 0;
INIT_DEVICE();
SREG = 0x80;
SEI();
//除串口的其他试验程序
delay_nms(500);
PORTC|=(1<<7); //PC7输出高电平
delay_nms(800);
PORTC&=~(1<<7);
//除串口的其他试验程序
while(1)
{
delay_nms(800);
if(getright_state == 1)
{
USART0_TxD(0x01);
}
if(getright_state == 2)
{
USART0_TxD(0x02);
}
if(getright_state == 3)
{
USART0_TxD(0x03);
}
if(getright_state == 4)
{
USART0_TxD(0x04);
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|