|
楼主 |
发表于 2009-8-10 15:37:05
|
显示全部楼层
另一单片机接收显示正确
这是发送代码
#include<iom48v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uint send_data[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0--->9
uint D[10]={0x24,0xf4,0xac,0xe4,0x74,0x64,0x24,0xf4,0x24,0x64};//显示0-->9
uint B[10]={0x30,0x70,0x10,0x10,0x50,0x90,0x90,0x30,0x10,0x10};//
uint i;
void port_init(void)
{
DDRB=0xff;
PORTB=0xff;
PORTC = 0xff; //m103 output only
DDRC = 0xff;
DDRD=0xff;
PORTD=0xff;
}
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00; //U2X = 0,不加倍数率
UCSR0C = 0x06; //8位
UBRR0L = 0x33; //set baud rate lo,波特率为9.6K
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x28; //发送使能,数据寄存器空中断使能
}
void init_devices(void)
{
CLI();
port_init;
uart0_init();
MCUCR = 0x00;
TIMSK0= 0x00; //timer interrupt sources
TIMSK1= 0x00;
TIMSK2= 0x00;
SEI(); //re-enable interrupts
}
void Delay()
{ uint m,n;
for(m=500;m!=0;m--)
for(n=5000;n!=0;n--)
;
}
#pragma interrupt_handler uart0_udre_isr:20
void uart0_udre_isr(void)
{
//character transferred to shift register so UDR is now empty
UDR0=send_data;
PORTB=(B|0x0f);//PORTB的低四位控制数码管显示,高电平有效,现要求四位数码管都同时分别从0显示到9
PORTD=D; //PORTB高四位即B[10]中的编码与D[10]一起做数码管段码
//因为制版的缘故只能这样编码,编码在单独数码管显示时显示正常
Delay(); //与接收的单片机显示延时一致
i++;
if(i==10)
i=0;
}
void main()
{
i=0;
init_devices();
//UDR0=send_data;
while(1)
{ ;
}
} |
|