📄 cloc-p.c
字号:
/*
通讯说明:
主机的通信:主机循环扫描
flag1 第一组数据
主线是高电位的
flag2 第二组数据
一直允许他
*/
/* 设计目的:双机信息传替*/
#include <iom48v.h>
#include <macros.h>
#include <eeprom.h>
#define uchar unsigned char
#define unit unsigned int
#define ulong unsigned long
#define xtal 8
#define fosc 8000000 //晶振8MHZ
#define baud 9600 //波特率
#define SIO1 PORTC|=0X10
#define SIO0 PORTC&=~0X10
#define a50 PORTD&=~0x08
#define a51 PORTD|=0X08
uchar date,flag;
uchar n,ORDER;
uchar tm2[4]={11};
void port_init(void)
{
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x0F;
PORTD = 0x08;
DDRD = 0xC8;
}
//Watchdog initialize
// prescale: 32K
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCSR = 0x0e; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x33; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x90;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
uart0_init();
watchdog_init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK0 = 0x00; //timer 0 interrupt sources
TIMSK1 = 0x00; //timer 1 interrupt sources
TIMSK2 = 0x00; //timer 2 interrupt sources
PCMSK0 = 0x00; //pin change mask 0
PCMSK1 = 0x00; //pin change mask 1
PCMSK2 = 0x00; //pin change mask 2
PCICR = 0x00; //pin change enable
PRR = 0x00; //power controller
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
/* 微秒级延时程序 */
void del(int time)
{
do
{
time--;
}
while (time>1);
}
/* 毫秒级延时程序 */
void delay_1ms(void)
{ unsigned int i1;
for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
;
}
void delay(unsigned int n)
{
unsigned int i2=0;
while(i2<n)
{delay_1ms();
i2++; WDR();
}
}
/* 字符输入函数 */
unsigned char getchar(void)
{
while(!(UCSR0A& (1<<RXC0)));
return UDR0;
}
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
uchar udr;
//uart has received a character in UDR
udr=UDR0;
if(n==2)
{
tm2[ORDER]=udr;
ORDER++;
if(ORDER==4)
{
n=0;
ORDER=0;
flag=1;
}
}
if(udr==0x0A)
{
n=1;
}
if(n==1)
{
if(udr==0x46)
{
n=2;
ORDER=0;
}
}
}
void send_asd(uchar date)
{
char i;
uchar n=0x01;
a50;
del(100);
a51;
del(10);
for(i=0;i<8;i++)
{
if((date&n)==n) a51; else a50;
del(100);
n<<=1;
WDR();
}
a51;
}
void send_asd1()
{
char ii;
CLI();
//send_asd(11);
for(ii=0;ii<4;ii++)
{
send_asd(tm2[ii]);
}
SEI();
}
void main(void)
{
uchar i;
delay(100);
OSCCAL=0x90;
init_devices();
DDRD|=0x04; PORTD&=~0x04; //in
DDRD|=0x08; PORTD|=0x08;
while(1)
{
if(flag)
{
CLI();
send_asd1();
flag=0;
SEI();
}
WDR();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -