|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请大家给些简单的ICC 的C程序,膸想学习,谢谢 |
作者:bg4alf 栏目:单片机 |
请大家给些简单的ICC 的C程序,膸想学习,谢谢 |
2楼: | >>参与讨论 |
作者: blueboyjf 于 2006/1/25 10:11:00 发布:
随便看看吧 #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 于 2006/1/25 10:50:00 发布:
找个实验板是个不错的选择 实验板+例程,不错的选择 |
4楼: | >>参与讨论 |
作者: hanyafeng 于 2006/1/26 9:04:00 发布:
向双龙电子要光盘 |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |