#include "reg51.h" int code frequenzen[] = { -83 , -100 , -125 , -167 , -250}; int code zaehlwerte[] = { 12048 , 10000 , 8000 , 6024 , 4000 }; sbit ton_ausgabe = 0x95; unsigned int data ton_zaehler; unsigned char data zaehlstufe; void init(){ TMOD = 0x02; TR0 = 0; IT0 = 1; TH0 = frequenzen[0]; TL0 = frequenzen[0]; ton_zaehler = zaehlwerte[0]; zaehlstufe = 0; EX0 = 1; ET0 = 1; EA = 1 ; } void ext_int_bwm(void) interrupt 0 { ton_zaehler = 0; TR0 = 1; } void timer0(void) interrupt 1 { ton_ausgabe = ~ton_ausgabe; ton_zaehler++; if(ton_zaehler == 0){ zaehlstufe++; if(zaehlstufe == 5){ zaehlstufe = 0; TR0 = 0; return; } else{ TR0 = frequenzen[zaehlstufe]; ton_zaehler = zaehlwerte[zaehlstufe]; } } } void main(){ init(); while(1); }