世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请大家给些简单的ICC 的C程序,膸想学习,谢谢

作者:bg4alf 栏目:单片机
请大家给些简单的ICC 的C程序,膸想学习,谢谢
请大家给些简单的ICC 的C程序,膸想学习,谢谢

2楼: >>参与讨论
blueboyjf
随便看看吧

#include <iom8v.h>
#include <macros.h>
#define fosc 8000000 //8MHZ
#define baud 9600     //baud rate
unsigned CHAR tmprecv=0;
/*    Timer delay function (microsecend)    */
void delay_us(int time)
     {     
        do
          {
         time--;
        }    
        while (time>1);
     }      
/*    Timer delay function (millisecend)    */     
void delay_ms(unsigned int time)
     {
      while(time!=0)
            {        
           delay_us(1000);
           time--;
          }
     }    
void putCHAR(unsigned CHAR c)
    {     
     while (!(UCSRA&(1<<UDRE)));
     UDR=c;    
    }
/*          字符输入函数          */    
unsigned CHAR getCHAR(void)
      {
     while(!(UCSRA& (1<<RXC)));
     return UDR;
    }        
/*            字符串输出函数            */    
int puts(CHAR *s)
    {
    while (*s)
        {
        putCHAR(*s);
        s++;
        }    
    putCHAR(0x0a);//回车换行
    putCHAR(0x0d);
    return 1;
    }
/*            不含回车换行的字符串输出函数      */    
void putstr(CHAR *s)
    {
    while (*s)
        {
        putCHAR(*s);
        s++;
        }    
    }                
void uart_init(void)
{
    //set baud rate
    UBRRL=(fosc/16/(baud+1))%256;
    UBRRH=(fosc/16/(baud+1))/256;
    //Enable RECEIVER and transmitter and RECEIVER interrupt
    UCSRB = 0x18;
    //Set frame format:
    //UCSRC(7:0):URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
    //Asynchronous mode;disable parity mode;1 stop bit;8 data bit
    UCSRC = 0x86;
    
}
void sys_init(void)
{
      GICR = 0x00;        // Int0,Int1 disable
      uart_init();
      SEI();
//      OCR1BH = 0x00;
//      OCR1BH = 0xff;
}

#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
      CLI();
      putstr("int0\n");
      SEI();
}

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
      CLI();
      putstr("int1\n");
      SEI();
}

#pragma interrupt_handler RX_isr:12
void RX_isr()
{    CLI();
    tmprecv = UDR;
    putCHAR(tmprecv);
    SEI();
}
//put out integer that less than 65535
void putint(unsigned int data)
{
    unsigned CHAR i,j,array[5];
    unsigned int divisor=10000,base=10;
    array[0] = data/divisor;
    for(i=1;i<5;i++)
    {
        data -= array[i-1]*divisor;
        divisor /= base;
        array[i] = data/divisor;
    }
    for(i=0;i<5;i++)
    {
        if(array[i])break;
    }
    if(i==5)
    putCHAR('0');
    else
    {
        for(j=i;j<5;j++)
        {
            putCHAR(array[j]+48);
        }
    }
    putCHAR('\r');
}
//put out float NUMBER that less than 65535(4 bit decimal fraction)
void putfloat(float data)
{
    unsigned int tmpdata;
    unsigned CHAR i,j,array[5],apoint[4];    //array=int PART, apoint = float PART
    unsigned int divisor=10000,base=10;
    //put the int PART of the float data to array[]
    tmpdata = data;
//    putint(tmpdata);
    array[0] = tmpdata/divisor;
    for(i=1;i<5;i++)
    {
        tmpdata -= array[i-1]*divisor;
        divisor /= base;
        array[i] = tmpdata/divisor;
    }
    //put the decimal fraction of the float data to apoint[]
    divisor = 1000;
    tmpdata = data;
    tmpdata = (data - tmpdata)*10000;
    putint(tmpdata);
    apoint[0] = tmpdata/divisor;
    for(i=1;i<4;i++)
    {
        tmpdata -= apoint[i-1]*divisor;
        divisor /= base;
        apoint[i] = tmpdata/divisor;
    }
    //Judge if the data equal to zero
    for(i
3楼: >>参与讨论
dycxin
找个实验板是个不错的选择
实验板+例程,不错的选择


4楼: >>参与讨论
hanyafeng
向双龙电子要光盘
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问有谁用BASCOM开发AVR好用吗
程序中延时的作用,双龙的程序!!
pcf8563t与mega128的系统下twi通讯怎么不行呀?
高手再帮我看看GCC的输出是怎么回事?
请教ATTINY2313替代90S2313问题?


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号