標題: avr單片機雙通信C程序 [打印本頁]
作者: admin 時間: 2013-6-14 18:20
標題: avr單片機雙通信C程序
將下面2個程序分別燒錄進2個單片機中.
單片機U1
//ICC-AVR application builder : 2013-6-14 10:17:58
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
#define LED1_ON PORTD|=(1<<PD4)
#define LED1_OFF PORTD&=~(1<<PD4)
#define LED2_ON PORTD|=(1<<PD5)
#define LED2_OFF PORTD&=~(1<<PD5)
//共陽極數碼管
unsigned char table[]={0XC0,0XF9,0XA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8e};
unsigned char count=0,count_h,count_l;
unsigned char a=0,cnt,cnt1;
unsigned char key,count_temp;
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0x00;
PORTC = 0xFF; //m103 output only
DDRC = 0xFF;
PORTD = 0xFF;
DDRD = 0x32;
}
//TIMER0 initialize - prescale:256
// WGM: Normal
// desired value: 0.005Sec
// actual value: 0.005Sec (0.2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x64; //set count
OCR0 = 0x9C; //set compare
TCCR0 = 0x04; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
a++;
TCNT0 = 0x64; //reload counter value
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
//uart has received a character in UDR
unsigned char udr0;
udr0=UDR;
count_temp=udr0;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
uart0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//發送數據uart0_TX
//函數功能:把要發送的數據data送到發送數據緩存器UDR中,然后發送出去
void uart0_TX(unsigned char data)
{
while(!(UCSRA&(1<<UDRE)));
UDR=data;
}
//8M晶振頻率下的延時一毫秒
void delay(unsigned int k)
{
unsigned int m,n;
for(m=0;m<k;m++)
{
for(n=0;n<1140;n++)
{;}
}
}
//數碼管顯示函數
void display(void)
{
count_h=count/10;
count_l=count%10;
PORTC=table[count_h];
LED1_ON;
delay(1);//這個延時很重要,不加的話CUP運行過快將會導致LED數碼管無法顯示;
LED1_OFF;
PORTC=table[count_l];
LED2_ON;
delay(1);
LED2_OFF;
}
//主函數
void main(void)
{
init_devices();
while(1)
{
key=PINB;
uart0_TX(key);
display();
switch(count_temp)
{
case 1: TIMSK = 0x01;break;
case 2: TIMSK = 0x00;break;
case 3: count=0X00;TIMSK = 0x01;break;
}
if(a==150)
{
a=0;
if(count==59)
{ count=0; }
else { count++; }
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
單片機U2
//ICC-AVR application builder : 2013-6-14 10:31:18
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
unsigned char led_dis;
unsigned char count_temp,cnt1,cnt=1;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x02;
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
//uart has received a character in UDR
unsigned char udr0;
udr0=UDR;
led_dis=udr0;
}
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
//external interupt on INT0
cnt++;
if(cnt==1)
{
count_temp=1;
}
else if(cnt==2)
{
count_temp=2;
cnt=0;
}
}
#pragma interrupt_handler int1_isr:iv_INT1
void int1_isr(void)
{
//external interupt on INT1
count_temp=3;
}
//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();
MCUCR = 0x0A;
GICR = 0xC0;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//發送數據函數
void USART_TX(unsigned char data)
{
while(!(UCSRA&(1<<UDRE)));
UDR=data;
}
//主函數
void main(void)
{
init_devices();
while(1)
{
cnt1=count_temp;
USART_TX(cnt1);
PORTB=led_dis;
}
}
作者: 風暴下的小草 時間: 2015-7-27 17:20
大神:這個方案能做嗎?
硬件:
二套AVR電路板,每套電路板有一個AVR單片機,四位液晶顯示電路,一個蜂鳴報警電路,一個振動電路,二個遙控接收放大電路,一個電源指示電路,一個狀態指示燈電路,一個晶振電路,一個高電平復位電路,
編程要求:
二個遙控器交替按下,按下時間在0.3左右(0.25到0.35之間)A遙控器按下0.3左右停頓0.055秒左右B遙控器按下0.3左右停頓0.055秒左右,也就是說A遙控器不發送紅線信號到B遙控器發送紅外線信號的時間不能大于0.07秒(如0.071秒)蜂鳴器就報一下警,顯示器數字就加1。小于0.04秒振動器振動一下。
遙控器按下的時間0.3秒左右單片機不用管,單片機只控制A遙控器抬起到B遙控器按下的時間和B遙控器抬起到A遙控器按下的時間。
作者: 風暴下的小草 時間: 2015-7-27 17:24
476902250QQ.COM
作者: 風暴下的小草 時間: 2015-8-11 20:51
476902250@QQ.COM
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
精品国产一区二区三区性色av
|
日韩一区二区在线视频
|
欧美精品在线播放
|
国产综合区|
中文在线a在线
|
最新av在线播放
|
2020国产在线
|
亚洲成a|
91久久视频
|
亚洲二区视频
|
国产欧美精品在线观看
|
国产性色视频
|
国产视频日韩
|
亚洲精品乱码久久久久久蜜桃91
|
久久久91精品国产一区二区三区
|
羞羞视频在线观看免费观看
|
丝袜 亚洲 另类 欧美 综合
|
免费在线视频一区二区
|
亚洲一区 中文字幕
|
欧美一级久久久猛烈a大片
日韩av免费在线观看
|
成人欧美一区二区三区黑人孕妇
|
免费一级片
|
日韩av成人在线
|
日韩精品视频中文字幕
|
免费中文字幕日韩欧美
|
色啪网
|
米奇7777狠狠狠狠视频
|
精品久久久久久久久久久久久
|
成人欧美一区二区三区在线观看
|
欧美1级
|
精品不卡
|
日韩欧美在线播放
|
夜夜爽99久久国产综合精品女不卡
|
精品亚洲永久免费精品
|
99re在线视频免费观看
|
日韩精品一区二
|
av成人在线观看
|
国产成人精品免高潮在线观看
|
国产精品国产成人国产三级
|
97精品超碰一区二区三区
|
亚洲不卡
|