滚动码发码程序

上传人:ni****g 文档编号:465503577 上传时间:2023-04-17 格式:DOC 页数:21 大小:122KB
返回 下载 相关 举报
滚动码发码程序_第1页
第1页 / 共21页
滚动码发码程序_第2页
第2页 / 共21页
滚动码发码程序_第3页
第3页 / 共21页
滚动码发码程序_第4页
第4页 / 共21页
滚动码发码程序_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《滚动码发码程序》由会员分享,可在线阅读,更多相关《滚动码发码程序(21页珍藏版)》请在金锄头文库上搜索。

1、滚动码发码程序/ 滚动码实验/-/ 文件名 : send.c/ 版本 : V1.0/ 日期 : 13/12/06/ 功能 : 发送滚动码/编译环境使用 MCU: PIC16F877/+/ 发码说明/+/*( 一) 定义逻辑单元格式,引导码和同步头:1,定义一个逻辑单元 =3TE (TE=400um为一个单位 ) 。2 ,定义逻辑 0 为: 高电平 =2TE,低电平 =1TE;定义逻辑 1 为: 高电平 =1TE,低电平 =2TE,3 ,引导码为 :3TE 的高电平。4 ,同步头为 :10TE 的低电平。( 二)32 位固定码格式定义RVOOKKKKIIIIIIIIIIIIIIIIIIIIIII

2、II=S/N -序列号 (24 BIT)K=KEY - 按键 (4 BIT)R=Rept -重复 / 首次 (1 BIT) /暂时不使用V=Vlow -低电(1 BIT) /暂时不使用O= -保留位(2 BIT)( 三)32位跳码格式定义KKKKDDDD SSSSSSSS SSSSSSSS DDDDDDDD / S=Sync同步-计数器 (16 BIT)/ 暂时使用 16 位/ D=Disc -识别码 ( 8 BIT) /暂时使用 8 位( 四) 发射和接收拥有相同的32 位厂家码 (MA)*/- #include /- /-常量定义 /- #define TE 400 /TE=400,基本时

3、间单元#define Period 200 / TIME2 200us中断一次#define On 1 /键盘按值,高有效#define Work_Main0 0xa1 /厂商 ID 定义#define Work_Main1 0xb2#define Work_Main2 0xc3#define Work_Main3 0xd4#define Key0 RA0 /键盘定义#define Key1 RA1#define Key2 RA2#define Key3 RA3#define RFout RB2 /信号输出/ 测试位是否为1 的两种方法#define Test(byte,bite) (byte

4、)&(1(bite)!=0) /测试位是否为1,为1则返回1,0 则返回0#define STATUSIT(avr,s) (unsigned)(&avr)*8+(s) /绝对寻址定义static bit C STATUSIT(STATUS,0); /对进位位进行定义/- /- unsigned char内存定义SendBar8; /发送数组#define Keyboard SendBar0 /发送码 0,固定码,低四位是键值#define SNH SendBar1 /发送码 1,固定码,序列号高位#define SNMSendBar2 /发送码 2,固定码,序列号中位#define SNL S

5、endBar3 /发送码 3,固定码,序列号低位#define Roll0 SendBar4 /发送码 4,滚动码,指针加密的高4 位是键值,低四位是指针高四位( 暂时不用 )#define Roll1 SendBar5 /发送码 5,滚动码,指针的中8 位加密#define Roll2 SendBar6 /发送码 5,滚动码,指针的低8 位加密#define Roll3 SendBar7 /发送码 5,滚动码,识别码,8 位,是序列号的低8 位加密unsigned char TrueBar4; /真实码,用来加密的#define KeyIDTrueBar0 /键值#define Counte

6、rH TrueBar1 /指针高8 位#define CounterL TrueBar2 /指针低8 位,可以用它的低四位对高四位进行编码#define ID TrueBar3 /识别码 , 是序列号的最低 8 位,变化比较大bank1 unsigned char Encode4; /编码密码bit KeyFlage; /键盘消抖允许bit Wait; /发送等待允许unsigned char KeyCounter; /键盘消抖定时器unsigned char SendCounter;/ 中断次数计数器unsigned char WaitCounter; /电平等待时间缓存unsigned c

7、harByteCount; /字节计数函数unsigned char BitCount; /比特计数函数unsigned char Waiter; / 输出反转定时计数器,用于低电平延时 unsigned char aa;unsigned char Etemp; /编码中用来存储CounterL 值 unsigned char Esave;union /联合体,指针unsigned int Finger;unsigned char Pointer2;Rfinger;#define PointerL Rfinger.Pointer0 #define PointerHRfinger.Pointer

8、1 /-/定义函数类型/-void Picint(void); /初始化函数void KeyScan(void); /键盘扫描void interrupt SDI(void); /中断函数void Work0(void); / void Work1(void);事件处理函数void Work2(void);void Work3(void);void Send(void) ; /数据发送函数void PointerAdd(void); /指针加计数unsigned char ReadEeprom(unsigned char E_Addr); /读EEPROMvoid WriteEeprom(un

9、signed char E_Addr,unsigned char E_Data); / EEPROM写void GetEncode(void); /产生编码密码void Encoder(void); /产生编码/-/ EEPROM定义/-#define M_SNL 0x00 /序列号 24 位, 存入 EEPROM中 #define M_SNM 0x01/#define M_SNH 0x02 /#define M_CounterL 0x03 /存储旧的指针16 位0x04 / #define M_CounterH/*/ main函数/*void main()Picint();WriteEeprom(M_SNL,0xad); /写序列号手,柄序列号,24 位,上电写入,这块仅用于实验,实际应该是编程写入,/ 比如可以用串口线通过上位机写入序列号 , 这部分只需在写入前加上串口接收程序 !WriteEeprom(M_SNM,0xb2);WriteEeprom(M_SNH,0xc3); / 测试时用,实际时应初始化写入一次,后自行加计数,在编程前把 EEPROM改为 00Writ

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号