|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2010-7-28 16:46:25
|
显示全部楼层
以下只是程序的一部分
void uart_send(unsigned char data)
{
alt_u16 status;
status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
while(!(status&0x0040))//等待发送完成
status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE,data);
}
//UART发送多个字节子程序
void uart_send_n(unsigned char *ptr)
{
while(*ptr)
{
uart_send(*ptr);
++ptr;
usleep(100);
}
uart_send(0x0a);//显示完一个字符串就回车换行
}
void send_2_pc(alt_u16 zz)
{
pc_table[0]=lcd_table[zz%1000000/100000];
pc_table[1]=lcd_table[zz%100000/10000];
pc_table[2]=lcd_table[zz%10000/1000];
pc_table[3]=lcd_table[zz%1000/100];
pc_table[4]=lcd_table[zz%100/10];
pc_table[5]=lcd_table[zz%10];
uart_send_n(pc_table);//将数据用串口发送给pc机
}
//串口接收中断服务程序
void uart_isr(void * context,alt_u32 id)
{
unsigned char temp;
temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE);
switch(temp)
{
case 'c':
{
//zzz=fre;
send_cmd_ready=ready;
cmd_select=cmd_celiang;
}
break;
case 'z':
{
send_cmd_ready=ready;
cmd_select=cmd_zijian;
}
break;
case 'n':
{
send_cmd_ready=not_ready;
}
break;
}
}
//串口中断初始化
void uart_init()
{
IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, 0x80);//接收中断使能
IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE, 0x0);//清状态标志
// IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x0);//清接收寄存器
alt_irq_register(UART_0_IRQ,0,uart_isr);
}
alt_u16 zzz;
int main()
{
//system_init();
uart_init();//串口初始化
timer_1_init();//定时器1初始化,用于发送
timer_2_init();//定时器2初始化,用于接收
timer_3_init();//定时器3初始化,用于定时发送指令至下位机
lcd_init();//液晶初始化
//一下while只用于测试
while(1)
{
while(!sbpin)
{
if(send_cmd_ready==ready)
{
senddata(cmd_select); //涉及到定时器中断的操作
send_cmd_ready=not_ready;
}
}
receive_data();//涉及到定时器中断的操作
data_chuli();
//if(bodd2_cal!=bodd2_rec)
//if(data_ready==ready)
{
data_ready=not_ready;
zzz=tmp.all;
menu_celiang(cmd_select,zzz);
send_2_pc(zzz);//将数据发送到pc机
seg_display(zzz);
}
}
} |
|