Chả hiểu tại sao cứ phải là asm nhỉ
)))))))))))))))))))))))))))))))))))))))

/*Thach anh su dung f=24Mhz*/ #include "regx52.h" typedef unsigned char uchar; typedef unsigned int uint; sbit c1=P0^0; sbit c2=P0^1; sbit c3=P0^2; sbit c4=P0^3; sbit c5=P0^4; sbit c6=P0^5; sbit c7=P0^6; sbit c8=P0^7; sbit c9=P2^7; sbit c10=P2^6; sbit c11=P2^5; sbit c12=P2^4; sbit c13=P2^3; sbit c14=P2^2; sbit c15=P2^1; sbit c16=P2^0; sbit c17=P3^7; sbit c18=P3^6; sbit c19=P3^5; sbit c20=P3^4; sbit c21=P3^3; sbit c22=P3^2; sbit c23=P3^1; sbit c24=P3^0; sbit c25=P1^7; sbit c26=P1^6; sbit c27=P1^5; sbit c28=P1^4; sbit c29=P1^3; sbit c30=P1^2; sbit c31=P1^1; sbit c32=P1^0; uchar num_pwm; uchar pwm_c[32]; uint delay_in_t1; void isr_timer1() interrupt 3 using 2{ TH1=0xFE; /* -24000000/12/60/100 ~= -333 ->0xfeb3 (100 nghia la 100 muc sang)*/ TL1=0xB3; /* chu ky ngat timer1 T=(333/2)us --> T*6 = 999 us ~= 1ms*/ c1=(pwm_c[0]>num_pwm)?1:0; c2=(pwm_c[1]>num_pwm)?1:0; c3=(pwm_c[2]>num_pwm)?1:0; c4=(pwm_c[3]>num_pwm)?1:0; c5=(pwm_c[4]>num_pwm)?1:0; c6=(pwm_c[5]>num_pwm)?1:0; c7=(pwm_c[6]>num_pwm)?1:0; c8=(pwm_c[7]>num_pwm)?1:0; c9=(pwm_c[8]>num_pwm)?1:0; c10=(pwm_c[9]>num_pwm)?1:0; c11=(pwm_c[10]>num_pwm)?1:0; c12=(pwm_c[11]>num_pwm)?1:0; c13=(pwm_c[12]>num_pwm)?1:0; c14=(pwm_c[13]>num_pwm)?1:0; c15=(pwm_c[14]>num_pwm)?1:0; c16=(pwm_c[15]>num_pwm)?1:0; c17=(pwm_c[16]>num_pwm)?1:0; c18=(pwm_c[17]>num_pwm)?1:0; c19=(pwm_c[18]>num_pwm)?1:0; c20=(pwm_c[19]>num_pwm)?1:0; c21=(pwm_c[20]>num_pwm)?1:0; c22=(pwm_c[21]>num_pwm)?1:0; c23=(pwm_c[22]>num_pwm)?1:0; c24=(pwm_c[23]>num_pwm)?1:0; c25=(pwm_c[24]>num_pwm)?1:0; c26=(pwm_c[25]>num_pwm)?1:0; c27=(pwm_c[26]>num_pwm)?1:0; c28=(pwm_c[27]>num_pwm)?1:0; c29=(pwm_c[28]>num_pwm)?1:0; c30=(pwm_c[29]>num_pwm)?1:0; c31=(pwm_c[30]>num_pwm)?1:0; c32=(pwm_c[31]>num_pwm)?1:0; if(++num_pwm==100){ num_pwm=0; } ++delay_in_t1; } void delay_ms(uint time){ delay_in_t1 = 0; while(delay_in_t1 <= time*6); } void main(){ TMOD=0x10; /*timer 1 16bit*/ TR1=1; TH1=0xFE; TL1=0xB3; IE=0x88; /*Ket thuc khoi dong timer1*/ P0 = 0; P1 = 0; P2 = 0; P3 = 0; delay_ms(3000); while(1){ } }
43: void isr_timer1() interrupt 3 using 2{ C:0x001E C0E0 PUSH ACC(0xE0) C:0x0020 C0D0 PUSH PSW(0xD0) 44: TH1=0xFE; /* -24000000/12/60/100 ~= -333 ->0xfeb3 (100 nghia la 100 muc sang)*/ C:0x0022 758DFE MOV TH1(0x8D),#0xFE 45: TL1=0xB3; /* chu ky ngat timer1 T=(333/2)us --> T*6 = 999 us ~= 1ms*/ 46: C:0x0025 758BB3 MOV TL1(0x8B),#0xB3 47: c1=(pwm_c[0]>num_pwm)?1:0; C:0x0028 E509 MOV A,pwm_c(0x09) C:0x002A D3 SETB C C:0x002B 9508 SUBB A,num_pwm(0x08) C:0x002D 4003 JC C:0032 C:0x002F D3 SETB C C:0x0030 8001 SJMP C:0033 C:0x0032 C3 CLR C C:0x0033 9280 MOV c1(0x80.0),C 48: c2=(pwm_c[1]>num_pwm)?1:0; C:0x0035 E50A MOV A,0x0A C:0x0037 D3 SETB C C:0x0038 9508 SUBB A,num_pwm(0x08) C:0x003A 4003 JC C:003F C:0x003C D3 SETB C C:0x003D 8001 SJMP C:0040 C:0x003F C3 CLR C C:0x0040 9281 MOV c2(0x80.1),C 49: c3=(pwm_c[2]>num_pwm)?1:0; C:0x0042 E50B MOV A,0x0B C:0x0044 D3 SETB C C:0x0045 9508 SUBB A,num_pwm(0x08) C:0x0047 4003 JC C:004C C:0x0049 D3 SETB C C:0x004A 8001 SJMP C:004D C:0x004C C3 CLR C C:0x004D 9282 MOV c3(0x80.2),C 50: c4=(pwm_c[3]>num_pwm)?1:0; C:0x004F E50C MOV A,0x0C C:0x0051 D3 SETB C C:0x0052 9508 SUBB A,num_pwm(0x08) C:0x0054 4003 JC C:0059 C:0x0056 D3 SETB C C:0x0057 8001 SJMP C:005A C:0x0059 C3 CLR C C:0x005A 9283 MOV c4(0x80.3),C 51: c5=(pwm_c[4]>num_pwm)?1:0; C:0x005C E50D MOV A,0x0D C:0x005E D3 SETB C C:0x005F 9508 SUBB A,num_pwm(0x08) C:0x0061 4003 JC C:0066 C:0x0063 D3 SETB C C:0x0064 8001 SJMP C:0067 C:0x0066 C3 CLR C C:0x0067 9284 MOV c5(0x80.4),C 52: c6=(pwm_c[5]>num_pwm)?1:0; C:0x0069 E50E MOV A,0x0E C:0x006B D3 SETB C C:0x006C 9508 SUBB A,num_pwm(0x08) C:0x006E 4003 JC C:0073 C:0x0070 D3 SETB C C:0x0071 8001 SJMP C:0074 C:0x0073 C3 CLR C C:0x0074 9285 MOV c6(0x80.5),C 53: c7=(pwm_c[6]>num_pwm)?1:0; C:0x0076 E50F MOV A,0x0F C:0x0078 D3 SETB C C:0x0079 9508 SUBB A,num_pwm(0x08) C:0x007B 4003 JC C:0080 C:0x007D D3 SETB C C:0x007E 8001 SJMP C:0081 C:0x0080 C3 CLR C C:0x0081 9286 MOV c7(0x80.6),C 54: c8=(pwm_c[7]>num_pwm)?1:0; C:0x0083 E510 MOV A,0x10 C:0x0085 D3 SETB C C:0x0086 9508 SUBB A,num_pwm(0x08) C:0x0088 4003 JC C:008D C:0x008A D3 SETB C C:0x008B 8001 SJMP C:008E C:0x008D C3 CLR C C:0x008E 9287 MOV c8(0x80.7),C 55: c9=(pwm_c[8]>num_pwm)?1:0; C:0x0090 E511 MOV A,0x11 C:0x0092 D3 SETB C C:0x0093 9508 SUBB A,num_pwm(0x08) C:0x0095 4003 JC C:009A C:0x0097 D3 SETB C C:0x0098 8001 SJMP C:009B C:0x009A C3 CLR C C:0x009B 92A7 MOV c9(0xA0.7),C 56: c10=(pwm_c[9]>num_pwm)?1:0; C:0x009D E512 MOV A,0x12 C:0x009F D3 SETB C C:0x00A0 9508 SUBB A,num_pwm(0x08) C:0x00A2 4003 JC C:00A7 C:0x00A4 D3 SETB C C:0x00A5 8001 SJMP C:00A8 C:0x00A7 C3 CLR C C:0x00A8 92A6 MOV c10(0xA0.6),C 57: c11=(pwm_c[10]>num_pwm)?1:0; C:0x00AA E513 MOV A,0x13 C:0x00AC D3 SETB C C:0x00AD 9508 SUBB A,num_pwm(0x08) C:0x00AF 4003 JC C:00B4 C:0x00B1 D3 SETB C C:0x00B2 8001 SJMP C:00B5 C:0x00B4 C3 CLR C C:0x00B5 92A5 MOV c11(0xA0.5),C 58: c12=(pwm_c[11]>num_pwm)?1:0; C:0x00B7 E514 MOV A,0x14 C:0x00B9 D3 SETB C C:0x00BA 9508 SUBB A,num_pwm(0x08) C:0x00BC 4003 JC C:00C1 C:0x00BE D3 SETB C C:0x00BF 8001 SJMP C:00C2 C:0x00C1 C3 CLR C C:0x00C2 92A4 MOV c12(0xA0.4),C 59: c13=(pwm_c[12]>num_pwm)?1:0; C:0x00C4 E515 MOV A,0x15 C:0x00C6 D3 SETB C C:0x00C7 9508 SUBB A,num_pwm(0x08) C:0x00C9 4003 JC C:00CE C:0x00CB D3 SETB C C:0x00CC 8001 SJMP C:00CF C:0x00CE C3 CLR C C:0x00CF 92A3 MOV c13(0xA0.3),C 60: c14=(pwm_c[13]>num_pwm)?1:0; C:0x00D1 E516 MOV A,0x16 C:0x00D3 D3 SETB C C:0x00D4 9508 SUBB A,num_pwm(0x08) C:0x00D6 4003 JC C:00DB C:0x00D8 D3 SETB C C:0x00D9 8001 SJMP C:00DC C:0x00DB C3 CLR C C:0x00DC 92A2 MOV c14(0xA0.2),C 61: c15=(pwm_c[14]>num_pwm)?1:0; C:0x00DE E517 MOV A,0x17 C:0x00E0 D3 SETB C C:0x00E1 9508 SUBB A,num_pwm(0x08) C:0x00E3 4003 JC C:00E8 C:0x00E5 D3 SETB C C:0x00E6 8001 SJMP C:00E9 C:0x00E8 C3 CLR C C:0x00E9 92A1 MOV c15(0xA0.1),C 62: c16=(pwm_c[15]>num_pwm)?1:0; C:0x00EB E518 MOV A,0x18 C:0x00ED D3 SETB C C:0x00EE 9508 SUBB A,num_pwm(0x08) C:0x00F0 4003 JC C:00F5 C:0x00F2 D3 SETB C C:0x00F3 8001 SJMP C:00F6 C:0x00F5 C3 CLR C C:0x00F6 92A0 MOV c16(0xA0.0),C 63: c17=(pwm_c[16]>num_pwm)?1:0; C:0x00F8 E519 MOV A,0x19 C:0x00FA D3 SETB C C:0x00FB 9508 SUBB A,num_pwm(0x08) C:0x00FD 4003 JC C:0102 C:0x00FF D3 SETB C C:0x0100 8001 SJMP C:0103 C:0x0102 C3 CLR C C:0x0103 92B7 MOV c17(0xB0.7),C 64: c18=(pwm_c[17]>num_pwm)?1:0; C:0x0105 E51A MOV A,0x1A C:0x0107 D3 SETB C C:0x0108 9508 SUBB A,num_pwm(0x08) C:0x010A 4003 JC C:010F C:0x010C D3 SETB C C:0x010D 8001 SJMP C:0110 C:0x010F C3 CLR C C:0x0110 92B6 MOV c18(0xB0.6),C 65: c19=(pwm_c[18]>num_pwm)?1:0; C:0x0112 E51B MOV A,0x1B C:0x0114 D3 SETB C C:0x0115 9508 SUBB A,num_pwm(0x08) C:0x0117 4003 JC C:011C C:0x0119 D3 SETB C C:0x011A 8001 SJMP C:011D C:0x011C C3 CLR C C:0x011D 92B5 MOV c19(0xB0.5),C 66: c20=(pwm_c[19]>num_pwm)?1:0; C:0x011F E51C MOV A,0x1C C:0x0121 D3 SETB C C:0x0122 9508 SUBB A,num_pwm(0x08) C:0x0124 4003 JC C:0129 C:0x0126 D3 SETB C C:0x0127 8001 SJMP C:012A C:0x0129 C3 CLR C C:0x012A 92B4 MOV c20(0xB0.4),C 67: c21=(pwm_c[20]>num_pwm)?1:0; C:0x012C E51D MOV A,0x1D C:0x012E D3 SETB C C:0x012F 9508 SUBB A,num_pwm(0x08) C:0x0131 4003 JC C:0136 C:0x0133 D3 SETB C C:0x0134 8001 SJMP C:0137 C:0x0136 C3 CLR C C:0x0137 92B3 MOV c21(0xB0.3),C 68: c22=(pwm_c[21]>num_pwm)?1:0; C:0x0139 E51E MOV A,0x1E C:0x013B D3 SETB C C:0x013C 9508 SUBB A,num_pwm(0x08) C:0x013E 4003 JC C:0143 C:0x0140 D3 SETB C C:0x0141 8001 SJMP C:0144 C:0x0143 C3 CLR C C:0x0144 92B2 MOV c22(0xB0.2),C 69: c23=(pwm_c[22]>num_pwm)?1:0; C:0x0146 E51F MOV A,0x1F C:0x0148 D3 SETB C C:0x0149 9508 SUBB A,num_pwm(0x08) C:0x014B 4003 JC C:0150 C:0x014D D3 SETB C C:0x014E 8001 SJMP C:0151 C:0x0150 C3 CLR C C:0x0151 92B1 MOV c23(0xB0.1),C 70: c24=(pwm_c[23]>num_pwm)?1:0; C:0x0153 E520 MOV A,0x20 C:0x0155 D3 SETB C C:0x0156 9508 SUBB A,num_pwm(0x08) C:0x0158 4003 JC C:015D C:0x015A D3 SETB C C:0x015B 8001 SJMP C:015E C:0x015D C3 CLR C C:0x015E 92B0 MOV c24(0xB0.0),C 71: c25=(pwm_c[24]>num_pwm)?1:0; C:0x0160 E521 MOV A,0x21 C:0x0162 D3 SETB C C:0x0163 9508 SUBB A,num_pwm(0x08) C:0x0165 4003 JC C:016A C:0x0167 D3 SETB C C:0x0168 8001 SJMP C:016B C:0x016A C3 CLR C C:0x016B 9297 MOV c25(0x90.7),C 72: c26=(pwm_c[25]>num_pwm)?1:0; C:0x016D E522 MOV A,0x22 C:0x016F D3 SETB C C:0x0170 9508 SUBB A,num_pwm(0x08) C:0x0172 4003 JC C:0177 C:0x0174 D3 SETB C C:0x0175 8001 SJMP C:0178 C:0x0177 C3 CLR C C:0x0178 9296 MOV c26(0x90.6),C 73: c27=(pwm_c[26]>num_pwm)?1:0; C:0x017A E523 MOV A,0x23 C:0x017C D3 SETB C C:0x017D 9508 SUBB A,num_pwm(0x08) C:0x017F 4003 JC C:0184 C:0x0181 D3 SETB C C:0x0182 8001 SJMP C:0185 C:0x0184 C3 CLR C C:0x0185 9295 MOV c27(0x90.5),C 74: c28=(pwm_c[27]>num_pwm)?1:0; C:0x0187 E524 MOV A,0x24 C:0x0189 D3 SETB C C:0x018A 9508 SUBB A,num_pwm(0x08) C:0x018C 4003 JC C:0191 C:0x018E D3 SETB C C:0x018F 8001 SJMP C:0192 C:0x0191 C3 CLR C C:0x0192 9294 MOV c28(0x90.4),C 75: c29=(pwm_c[28]>num_pwm)?1:0; C:0x0194 E525 MOV A,0x25 C:0x0196 D3 SETB C C:0x0197 9508 SUBB A,num_pwm(0x08) C:0x0199 4003 JC C:019E C:0x019B D3 SETB C C:0x019C 8001 SJMP C:019F C:0x019E C3 CLR C C:0x019F 9293 MOV c29(0x90.3),C 76: c30=(pwm_c[29]>num_pwm)?1:0; C:0x01A1 E526 MOV A,0x26 C:0x01A3 D3 SETB C C:0x01A4 9508 SUBB A,num_pwm(0x08) C:0x01A6 4003 JC C:01AB C:0x01A8 D3 SETB C C:0x01A9 8001 SJMP C:01AC C:0x01AB C3 CLR C C:0x01AC 9292 MOV c30(0x90.2),C 77: c31=(pwm_c[30]>num_pwm)?1:0; C:0x01AE E527 MOV A,0x27 C:0x01B0 D3 SETB C C:0x01B1 9508 SUBB A,num_pwm(0x08) C:0x01B3 4003 JC C:01B8 C:0x01B5 D3 SETB C C:0x01B6 8001 SJMP C:01B9 C:0x01B8 C3 CLR C C:0x01B9 9291 MOV c31(0x90.1),C 78: c32=(pwm_c[31]>num_pwm)?1:0; 79: C:0x01BB E528 MOV A,0x28 C:0x01BD D3 SETB C C:0x01BE 9508 SUBB A,num_pwm(0x08) C:0x01C0 4003 JC C:01C5 C:0x01C2 D3 SETB C C:0x01C3 8001 SJMP C:01C6 C:0x01C5 C3 CLR C C:0x01C6 9290 MOV c32(0x90.0),C 80: if(++num_pwm==100){ C:0x01C8 0508 INC num_pwm(0x08) C:0x01CA E508 MOV A,num_pwm(0x08) C:0x01CC B46403 CJNE A,#0x64,C:01D2 81: num_pwm=0; C:0x01CF 750800 MOV num_pwm(0x08),#0x00 82: } 83: ++delay_in_t1; C:0x01D2 052A INC 0x2A C:0x01D4 E52A MOV A,0x2A C:0x01D6 7002 JNZ C:01DA C:0x01D8 0529 INC delay_in_t1(0x29) 84: }
void isr_timer1() interrupt 3 using 2{ TH1=0xFE; /* -24000000/12/60/100 ~= -333 ->0xfeb3 (100 nghia la 100 muc sang)*/ TL1=0xB3; /* chu ky ngat timer1 T=(333/2)us --> T*6 = 999 us ~= 1ms*/
43: void isr_timer1() interrupt 3 using 2{ C:0x001E C0E0 PUSH ACC(0xE0) ;2ckm C:0x0020 C0D0 PUSH PSW(0xD0) ;2ckm 44: TH1=0xFE; /* -24000000/12/60/100 ~= -333 ->0xfeb3 (100 nghia la 100 muc sang)*/ C:0x0022 758DFE MOV TH1(0x8D),#0xFE ;2ckm 45: TL1=0xB3; /* chu ky ngat timer1 T=(333/2)us --> T*6 = 999 us ~= 1ms*/ 46: C:0x0025 758BB3 MOV TL1(0x8B),#0xB3 ;2ckm
c1=(pwm_c[0]>num_pwm)?1:0;
47: c1=(pwm_c[0]>num_pwm)?1:0; C:0x0028 E509 MOV A,pwm_c(0x09) ;1ckm C:0x002A D3 SETB C ;1ckm C:0x002B 9508 SUBB A,num_pwm(0x08) ;1ckm C:0x002D 4003 JC C:0032 ;2ckm C:0x002F D3 SETB C ;1ckm C:0x0030 8001 SJMP C:0033 ;2ckm C:0x0032 C3 CLR C ;1ckm C:0x0033 9280 MOV c1(0x80.0),C ;2ckm
if(++num_pwm==100){ num_pwm=0; } ++delay_in_t1;
80: if(++num_pwm==100){ C:0x01C8 0508 INC num_pwm(0x08) ;1ckm C:0x01CA E508 MOV A,num_pwm(0x08) ;1ckm C:0x01CC B46403 CJNE A,#0x64,C:01D2 ;2ckm 81: num_pwm=0; C:0x01CF 750800 MOV num_pwm(0x08),#0x00 ;2ckm 82: } 83: ++delay_in_t1; C:0x01D2 052A INC 0x2A ;1ckm C:0x01D4 E52A MOV A,0x2A ;1ckm C:0x01D6 7002 JNZ C:01DA ;2ckm C:0x01D8 0529 INC delay_in_t1(0x29) ;1ckm C:0x01DA D0D0 POP PSW(0xD0) ;2ckm C:0x01DC D0E0 POP ACC(0xE0) ;2ckm C:0x01DE 32 RETI ;2ckm
/*Thach anh su dung f=24Mhz*/ #include "regx52.h" typedef unsigned char uchar; typedef unsigned int uint; sbit c1=P0^0; sbit c2=P0^1; sbit c3=P0^2; sbit c4=P0^3; sbit c5=P0^4; sbit c6=P0^5; sbit c7=P0^6; sbit c8=P0^7; sbit c9=P2^7; sbit c10=P2^6; sbit c11=P2^5; sbit c12=P2^4; sbit c13=P2^3; sbit c14=P2^2; sbit c15=P2^1; sbit c16=P2^0; sbit c17=P3^7; sbit c18=P3^6; sbit c19=P3^5; sbit c20=P3^4; sbit c21=P3^3; sbit c22=P3^2; sbit c23=P3^1; sbit c24=P3^0; sbit c25=P1^7; sbit c26=P1^6; sbit c27=P1^5; sbit c28=P1^4; sbit c29=P1^3; sbit c30=P1^2; sbit c31=P1^1; sbit c32=P1^0; uchar num_pwm; uchar pwm_c[32]; uint delay_in_t1; void isr_timer1() interrupt 3 using 2{ TH1=0xFD; /* -24000000/12/60/50 ~= -666 ->0xFD66 (50 nghia la 50 muc sang)*/ TL1=0x66; /* chu ky ngat timer1 T=(666/2)us --> T*3 = 999 us ~= 1ms*/ c1=(pwm_c[0]>num_pwm)?1:0; c2=(pwm_c[1]>num_pwm)?1:0; c3=(pwm_c[2]>num_pwm)?1:0; c4=(pwm_c[3]>num_pwm)?1:0; c5=(pwm_c[4]>num_pwm)?1:0; c6=(pwm_c[5]>num_pwm)?1:0; c7=(pwm_c[6]>num_pwm)?1:0; c8=(pwm_c[7]>num_pwm)?1:0; c9=(pwm_c[8]>num_pwm)?1:0; c10=(pwm_c[9]>num_pwm)?1:0; c11=(pwm_c[10]>num_pwm)?1:0; c12=(pwm_c[11]>num_pwm)?1:0; c13=(pwm_c[12]>num_pwm)?1:0; c14=(pwm_c[13]>num_pwm)?1:0; c15=(pwm_c[14]>num_pwm)?1:0; c16=(pwm_c[15]>num_pwm)?1:0; c17=(pwm_c[16]>num_pwm)?1:0; c18=(pwm_c[17]>num_pwm)?1:0; c19=(pwm_c[18]>num_pwm)?1:0; c20=(pwm_c[19]>num_pwm)?1:0; c21=(pwm_c[20]>num_pwm)?1:0; c22=(pwm_c[21]>num_pwm)?1:0; c23=(pwm_c[22]>num_pwm)?1:0; c24=(pwm_c[23]>num_pwm)?1:0; c25=(pwm_c[24]>num_pwm)?1:0; c26=(pwm_c[25]>num_pwm)?1:0; c27=(pwm_c[26]>num_pwm)?1:0; c28=(pwm_c[27]>num_pwm)?1:0; c29=(pwm_c[28]>num_pwm)?1:0; c30=(pwm_c[29]>num_pwm)?1:0; c31=(pwm_c[30]>num_pwm)?1:0; c32=(pwm_c[31]>num_pwm)?1:0; if(++num_pwm==100){ num_pwm=0; } ++delay_in_t1; } void delay_ms(uint time){ delay_in_t1 = 0; while(delay_in_t1 <= time*3); } void main(){ TMOD=0x10; /*timer 1 16bit*/ TR1=1; TH1=0xFD; TL1=0x66; IE=0x88; /*Ket thuc khoi dong timer1*/ P0 = 0; P1 = 0; P2 = 0; P3 = 0; delay_ms(3000); while(1){ } }
Comment