Skip to content

Instantly share code, notes, and snippets.

@adminy
Last active May 19, 2024 11:09
Show Gist options
  • Save adminy/fbced8604db9d93224e106d8d0b73c8a to your computer and use it in GitHub Desktop.
Save adminy/fbced8604db9d93224e106d8d0b73c8a to your computer and use it in GitHub Desktop.
/*--------------------------------------------------------------------------
INTRINS.H
Intrinsic functions for C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__
#define __INTRINS_H__
extern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned int _iror_ (unsigned int, unsigned char);
extern unsigned long _lror_ (unsigned long, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);
extern unsigned int _irol_ (unsigned int, unsigned char);
extern unsigned long _lrol_ (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
#endif
/*--------------------------------------------------------------------------
REG52.H
Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/* 8052 Extensions */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
/* BIT Registers */
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0; //8052 only
/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
/* IE */
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
/* IP */
sbit PT2 = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;
/* SCON */
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
/* P1 */
sbit T2EX = P1^1; // 8052 only
sbit T2 = P1^0; // 8052 only
/* T2CON */
sbit TF2 = T2CON^7;
sbit EXF2 = T2CON^6;
sbit RCLK = T2CON^5;
sbit TCLK = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2 = T2CON^2;
sbit C_T2 = T2CON^1;
sbit CP_RL2 = T2CON^0;
#endif
#include <reg52.h>
#include <intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
sfr WDT_CONTR = 0Xe1;
// buttons
sbit KEY1 = P3^6;
sbit KEY2 = P3^7;
// pins
sbit led = P2^5;
sbit led3 = P2^0;
sbit led2 = P2^1;
sbit led1 = P2^2;
sbit led0 = P2^3;
INT8U TxBuf[4];
INT8U send_f;
//when i = 100. delay ~ 1.5ms
static void delay(unsigned int s) {
unsigned int i;
for(i = 0; i < s; i++);
}
void UART_init() {
SCON = 0x50; // uart in mode 1 (8 bit), REN = 1
TMOD = TMOD | 0x20 ; // Timer 1 in mode 2
TH1 = 0xFD; // 9600 Bds at 11.059MHz
TL1 = 0xFD; // 9600 Bds at 11.059MHz
//IE = 0x90;
TR1 = 1; // Timer 1 run
ET1 = 0;
ES = 1; //allow serial port interrupt
PS = 1; // Serial port interrupt priority
EA = 1; // MCU Interrupt enable
}
void Sendchar(unsigned char c) {
SBUF = c;
while(TI == 0);
TI = 0;
}
void print_string(unsigned char* p) { // send string
while(*p != '\0') Sendchar(*p++);
}
// return a 10 digit data including a start bit 'S'
com_interrupt(void) interrupt 4 using 3 {
if (RI) { //handle receive interrupt
RI = 0; //clear the interrupt flag bit
TxBuf[2] = SBUF;
send_f = 1; //set data sending flag
led = 1;
}
}
void main(void) {
INT8U leng = 0;
INT8U i,k = 0;
INT8U RxBuf[4] = {0};
INT8U rxcount = 0xff;
INT8U TxBuf[30];
led = 1;
TxBuf[2] = 2;
TxBuf[3] = 0;
UART_init();
P0 = 0x00;
led1 = 0;
for(i = 0; i < 30; i++) {
TxBuf[i] = i;
}
Sendchar(0xA3); // set baud rate command
Sendchar(0x3A);
Sendchar(0x02); // set baud rate to: 9600
delay(6000);
Sendchar(0xA7); // set channel command
Sendchar(0x7A);
Sendchar(0x00); // set channel to: 06
delay(6000);
Sendchar(0xAB); // Set power command
Sendchar(0xBA);
Sendchar(0x0A); // Set power to: 10DBM
delay(6000);
Sendchar(0xA9); //Set Module ID Number
Sendchar(0x9A);
Sendchar(0x00); //Set Module ID number
Sendchar(0x01); //Set ID number
delay(6000);
delay(6000);
while(1) {
WDT_CONTR = 0x3c;
if(KEY1 == 0) {
delay(10);
while(!KEY1) delay(10); //send test data when a key is detected
led1 = 0;
// the first frame test data string or data length should not exceed 30 bytes
print_string("abcdefghijklmnopqrstuvwxyzABCD");
led1 = 1;
delay(750); // delay about 6 ms before sending the next frame of data
for(i = 0; i < 23; i++) Sendchar(TxBuf[i]); // send a 23 byte data packet
delay(750); //delay for about 6 ms before sending the next frame of data
Sendchar(0x66); //send single byte
}
delay(450);
led1 = 1;
delay(100);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment