搜索
bottom↓
回复: 3

请马潮老师帮忙解决一个应用问题

[复制链接]

出0入0汤圆

发表于 2007-7-5 10:11:46 | 显示全部楼层 |阅读模式
马老师我在主程序一直写发送一个数据,一共发送一千个,但是这期间我从上位机向AVR128发送数据,但是在这一千数据发送中,是不响应接受中断的,这是为什么??



void init_devices(void)

{

   CLI();  

   XDIV  = 0x00;  

   XMCRA = 0x00;  

   port_init();

   uart0_init();

   MCUCR =0x00;

   EICRA =0x00;  

   EIMSK =0x50;//EIMSK =0x50;

   EICRB =0x11;//EICRB =0x11;  

   TIMSK =0x05;// TIMSK =0x05;

   ETIMSK =0x04;

   SEI();  

}

//////////////////////////////////////////////////////////////////

//                                                               

//LCD切换显示子程序

//

//////////////////////////////////////////////////////////////////   

void timer0_init(void)

{

TCCR0 = 0x00; //stop

ASSR  = 0x00; //set async mode

TCNT0 = 0x16; //set count

OCR0  = 0xEA;

//TCCR0 = 0x07;//start timer

}

/*/////////////////////////////////////////////////////////////

//串口初始化程序

//

//发送子程序

//



////////////////////////////////////////////////////////////*/

void uart0_init(void)

{  

     UCSR0B = 0x00; //disable while setting baud rate

     UCSR0A = 0x00;

     UCSR0C = 0x06;

     UBRR0L = 0x19; //set baud rate lo

     UBRR0H = 0x00; //set baud rate hi

     UCSR0B = 0x98;

}

//

void USART_Transmit(unsigned int data)

{ //SEI();

     while(!(UCSR0A&0x20));   //等待发送缓冲器空,UDRE0数据寄存器空标志

      

   UDR0=data;               //发送数据,将被发送数据付给UDR0数据寄存器

}

//

#pragma interrupt_handler uart0_rx_isr:19

void uart0_rx_isr(void)

{



  unsigned char i;

  v1++;

  i=UDR0;

   

USART_Transmit(v1);

}

///////////////////////////////////////////////////////////////////////////////

//

//TIMER3 initialize - prescale:1024

// WGM: 0) Normal, TOP=0xFFFF

// desired value: 1Sec

// actual value:  1.000Sec (0.0%)

//

///////////////////////////////////////////////////////////////////////////////



//

//

  

void main(void)

{     

     int sum;

     int i;

    qwer=5;

     v1=0;

     sum=0;

    init_devices();

     

     

     while(1)

     {  



    if(sum<1000)

      {

   

         USART_Transmit('0');  

      sum++;}

        

     

     

   }

}  

 

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2007-7-7 13:54:18 | 显示全部楼层
/*****************************************************

This program was produced by the

CodeWizardAVR V1.25.5 Professional



Chip type           : ATmega16L

Program type        : Application

Clock frequency     : 4.000000 MHz

Memory model        : Small

External SRAM size  : 0

Data Stack size     : 256

*****************************************************/



#include <mega16.h>



#define RXB8 1

#define TXB8 0

#define UPE 2

#define OVR 3

#define FE 4

#define UDRE 5

#define RXC 7



#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)



void putchar(char c)

{

    while ((UCSRA & DATA_REGISTER_EMPTY)==0);

    UDR=c;

}



char i = 0;

// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

{

    char data;

    data=UDR;

    i++;

    putchar(i);

}

// Declare your global variables here



void main(void)

{



   // USART initialization

   // Communication Parameters: 8 Data, 1 Stop, No Parity

   // USART Receiver: On

   // USART Transmitter: On

   // USART Mode: Asynchronous

   // USART Baud Rate: 9600

   UCSRA=0x00;

   UCSRB=0x98;

   UCSRC=0x86;

   UBRRH=0x00;

   UBRRL=0x19;



   // Analog Comparator initialization

   // Analog Comparator: Off

   // Analog Comparator Input Capture by Timer/Counter 1: Off

   ACSR=0x80;

   SFIOR=0x00;



   // Global enable interrupts

   #asm("sei")



   while (1)

   {

      putchar(0);

   };

}



=======================================================

以上是使用CVAVR,在M16上,按你的思路编的测试程序。



尽管你的思路不切合实际的应用,但作为测试和验证我还是实现了,一点没有问题。



下面是测试结果,红色的为接收到数据后的返回值,其它你自己分析吧。

出0入0汤圆

发表于 2007-7-12 13:53:41 | 显示全部楼层
马老师,是否在main()函数中的一开始加上#asm("cli");更好些呢

出0入0汤圆

发表于 2007-8-10 16:47:42 | 显示全部楼层
AVR上电时I标志位是0,可以不写。



写了也可以,保险一点。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 02:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表