资源简介
uC/OS-II 编译器: ICCAVR
CPU ATMega16 8MHz 晶振
对原uC/OS-II进行了简化,去掉了hook,保留了基本功能,代码精简,编译后代码占 Mega16 的 26%
时钟使用timer2,中断时间为2 ms
//**************************************************//
//**************************************************//
任务1:刷新LED,检测按键,调整时间
任务2:计时,串口发送 9600 bps
//**************************************************//
//**************************************************//
作者: PiQiu
网站: www.txmcu.com
邮箱: songbaosena@163.com
//**************************************************//
代码片段和文件信息
#ifndef OS_MASTER_FILE
#include “includes.h“
#include “AVR_PQ1A.h“
#endif
#pragma data:code
const SEGMENT[16]={0x3f0x060x5b0x4f0x660x6d0x7d 0x07
0x7f0x6f0x770x7c0x390x5e0x790x71};
#pragma data:data
/*******************************************
函数名称: DS1302_init
功 能: 初始化DS1302的数据接口
参 数: 无
返回值 : 无
/********************************************/
void DS1302_portinit(void)
{
DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//将时钟端(RTC_CLK)数据端(RTC_DATA)片选端(RTC_CS)设置为输出
}
/*******************************************
函数名称: DS1302_writeB
功 能: 向DS1302写入一个字节数据(没有RST操作)
参 数: byte--要写入的数据
返回值 : 无
/********************************************/
void DS1302_writeB(uchar byte)
{
uchar i;
for(i=0;i<8;i++) //8位数据计数
{
PORTB&=~BIT(RTC_CLK); //拉低时钟端
if(byte&0x01) //当前位是否是1
{
PORTB|=BIT(RTC_DATA); //当前位是1,拉高数据端
}
else
{
PORTB&=~BIT(RTC_DATA); //当前位是0,拉低数据端
}
Delayus(10); //调整时钟和脉冲宽度
PORTB|=BIT(RTC_CLK); //时钟上升沿(DS1302采样数据)
byte>>=1; //数据右移1位,为送出新数据位做准备
}
}
/*******************************************
函数名称: DS1302_readB
功 能: 从DS1302读出一个字节数据(没有RST操作)
参 数: 无
返回值 : byte--读出的数据
/********************************************/
uchar DS1302_readB(void)
{
uchar ibyte=0;
DDRB&=~BIT(RTC_DATA); //将数据端口设置为输入
PORTB&=~BIT(RTC_DATA); //无上拉电阻
for(i=0;i<8;i++) //8位数据计数
{
byte>>=1; //保存读入的数据位
PORTB|=BIT(RTC_CLK); //时钟上升沿
Delayus(10); //延时,调整时钟脉冲宽度
PORTB&=~BIT(RTC_CLK); //时钟下降沿,DS1302输出数据位
Delayus(10); //等待数据变化(MEGA16太快,必须等待DS1302的数据位输出,否则不能正确读出)
if(PINB&BIT(RTC_DATA)) //当前位是否是高电平
{
byte|=BIT(PB7); //是高电平就将返回数据的当前位置1
}
else
{
byte&=~BIT(PB7); //是低电平就将返回数据的当前位置0
}
}
DDRB|=BIT(RTC_DATA); //最后将数据端口设置为输出
return byte; //返回读出的数据
}
/*******************************************
函数名称: DS1302_writeD
功 能: 向DS1302的某个地址写入一个字节数据
参 数: addr--地址值(寄存器或RAM)
data--要写入的地址
返回值 : 无
/********************************************/
void DS1302_writeD(uchar addruchar data)
{
PORTC&=~BIT(RTC_CS); //拉低片选端
PORTB&=~BIT(RTC_CLK); //拉低时钟端
Delayus(10);
PORTC|=BIT(RTC_CS); //拉高片选端
Delayus(10); //调整片选脉冲
DS1302_writeB(addr); //写入操作命令(地址)
Delayus(10);
PORTB&=~BIT(RTC_CLK); //拉低时钟端
Delayus(10);
DS1302_writeB(data); //写入数据
PORTB&=~BIT(RTC_CLK); //拉低时钟端
Delayus(10); //调整片选脉冲
PORTC&=~BIT(RTC_CS); //拉低片选端
}
/*******************************************
函数名称: DS1302_readD
功 能: 从DS1302的某个地址读出一个字节数据
参 数: addr--地址值(寄存器或RAM)
返回值 : data--读出的数据
/********************************************/
uchar DS1302_readD(uchar addr)
{
uchar data;
PORTC&=~BIT(RTC_CS); //拉低片选端
PORTB&=~BIT(RTC_CLK); //拉低时钟端
Delayus(10);
PORTC|=BIT(RTC_CS); //拉高片选端
Delayus(10); //调整片选脉冲
DS1302_writeB(addr); //写入操作命令(地址)
Delayus(10);
data=DS1302_readB(); //读出数据
Delayus(10);
PORTB&=~BIT(RTC_CLK); //拉
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 15715 2007-02-26 17:49 21_uCOSII\AVR_PQ1A.h
文件 6334 2007-02-26 19:30 21_uCOSII\funcs.c
文件 403 2007-03-04 11:29 21_uCOSII\funcs.dp2
文件 37160 2007-03-04 11:29 21_uCOSII\funcs.lis
文件 8901 2007-03-04 11:29 21_uCOSII\funcs.o
文件 17084 2007-03-04 11:29 21_uCOSII\funcs.s
文件 473 2007-02-26 08:22 21_uCOSII\includes.h
文件 1281 2007-02-26 08:23 21_uCOSII\os_cfg.h
文件 17859 2004-01-05 23:14 21_uCOSII\OS_CORE.C
文件 302 2007-03-04 11:29 21_uCOSII\OS_CORE.dp2
文件 67174 2007-03-04 11:29 21_uCOSII\OS_CORE.lis
文件 16439 2007-03-04 11:29 21_uCOSII\OS_CORE.o
文件 35682 2007-03-04 11:29 21_uCOSII\OS_CORE.s
文件 3923 2007-02-26 17:47 21_uCOSII\os_cpu.h
文件 0 2007-03-04 11:29 21_uCOSII\os_cpu_a.dp2
文件 27167 2007-03-04 11:29 21_uCOSII\os_cpu_a.lis
文件 7034 2007-03-04 11:29 21_uCOSII\os_cpu_a.o
文件 10311 2007-02-26 14:02 21_uCOSII\os_cpu_a.s
文件 5709 2006-12-01 13:24 21_uCOSII\os_task.c
文件 302 2007-03-04 11:29 21_uCOSII\os_task.dp2
文件 25948 2007-03-04 11:29 21_uCOSII\os_task.lis
文件 5528 2007-03-04 11:29 21_uCOSII\os_task.o
文件 12764 2007-03-04 11:29 21_uCOSII\os_task.s
文件 1579 2006-11-12 17:22 21_uCOSII\OS_TIME.C
文件 302 2007-03-04 11:29 21_uCOSII\OS_TIME.dp2
文件 5091 2007-03-04 11:29 21_uCOSII\OS_TIME.lis
文件 1308 2007-03-04 11:29 21_uCOSII\OS_TIME.o
文件 2797 2007-03-04 11:29 21_uCOSII\OS_TIME.s
文件 376 2007-02-27 10:04 21_uCOSII\prototype.h
文件 670 2007-02-26 07:58 21_uCOSII\readme.txt
............此处省略20个文件信息
相关资源
- AVR单片机ATmega16L驱动一个数码管Prot
- AVR-ATmega16双机通信双向,并带反馈I
- 基于ATMega16的freemodbus主站程序移植
- MPU6050的DMP程序 基于ATMEGA16 可移植
- ATmega16模数转换
- Atmega128上移植ucosii的实用例程
- 光电编码器-单片机程序(ATmega16).
- iccavr atmega128 实验程序
- atmega16驱动mpu6050
- 介绍uC/OS-II移植到VC的pdf
- 基于atmega16单片机的时钟
- uc/os-ii在51单片机中移植的一个程序
- 一种基于ATmega16单片机的粮食湿度监测
- 基于atmega16的RS485通信
- AVR单片机ATmega16L继电器Proteus仿真
- ATmega16多功能万年历
评论
共有 条评论