flashled8051/flash.c

79 lines
1.0 KiB
C
Raw Normal View History

2024-05-16 23:17:07 +02:00
#include <8052.h>
#ifndef FLASH_PIN
2024-05-18 14:44:16 +02:00
#define FLASH_PIN _P2_0
2024-05-16 23:17:07 +02:00
#endif
#ifndef IRQFREQ
#define IRQFREQ 1000L
#endif
2024-05-18 14:44:16 +02:00
#ifndef T0_BITS
#define T0_BITS 13
#endif
2024-05-16 23:17:07 +02:00
#define FOSC (SYSCLK*1000L)
2024-05-18 14:44:16 +02:00
#define T0_1MS ((65536)-FOSC/12L/IRQFREQ)
2024-05-16 23:17:07 +02:00
#define TCT IRQFREQ/2-1
unsigned char ctr_l = TCT&0xFF;
unsigned char ctr_h = (TCT>>8)&0xff;
unsigned char ctr_w = (TCT>>16)&0xff;
2024-05-18 14:44:16 +02:00
unsigned char counter = 0;
2024-05-16 23:17:07 +02:00
void handler() __interrupt 1
{
EA=0;
2024-05-18 14:44:16 +02:00
TL0 = (T0_1MS) & 0xFF; // Initial timer value
TH0 = T0_1MS>>8; // Initial timer value
2024-05-16 23:17:07 +02:00
__asm
mov a, #0xff
dec _ctr_l
cjne a,_ctr_l, 00001$
dec _ctr_h
cjne a,_ctr_h, 00001$
dec _ctr_w
cjne a,_ctr_w, 00001$
2024-05-18 14:44:16 +02:00
; cpl FLASH_PIN
2024-05-16 23:17:07 +02:00
__endasm;
2024-05-18 14:44:16 +02:00
counter ++;
P2 = counter ^0xff;
2024-05-16 23:17:07 +02:00
ctr_l = TCT&0xFF;
ctr_h = (TCT>>8)&0xff;
ctr_w = (TCT>>16)&0xff;
__asm
00001$:
__endasm;
EA=1;
}
void main()
{
P1=TMOD;
EA=0;
2024-05-18 14:44:16 +02:00
TMOD =1;
2024-05-16 23:17:07 +02:00
P1=TMOD;
TL0 = (T0_1MS) & 0xFF; // Initial timer value
TH0 = T0_1MS>>8; // Initial timer value
TR0 = 1; // Timer0 start run
ET0 = 1; // Enable timer0 interrupt
EA=1;
while(1);
}