[Menu]>[Circuits Gallery]>[LED flasher2]


Source code file for LED flasher 2

0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704
0705
0706
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833
0834
0835
0836
0837
0838
0839
0840
0841
0842
0843
0844
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871
0872
0873
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912
0913
0914
0915
0916
0917
0918
0919
0920
0921
0922
0923
0924
0925
0926
0927
0928
0929
0930
0931
0932
0933
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954
0955
0956
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
;********************************************************
;
;                  LED flash control 2
;
;                                 Device : PIC16F84A
;                                 Clock  : 4MHz
;                                 Author : Seiichi Inoue
;********************************************************

        list            p=pic16f84a
        include         p16f84a.inc
        __config _hs_osc & _wdt_off & _pwrte_on & _cp_off
        errorlevel      -302    ;Eliminate bank warning

;****************  Label Definition  ********************
        cblock  h'0c'
loop_cnt                        ;Loop counter for LED cnt
led_data0                       ;LED data 0
led_data1                       ;LED data 1
led01                           ;LED 01 pattern
led10                           ;LED 10 pattern
led11                           ;LED 11 pattern
port_work                       ;LED data save area
counter                         ;Software timer counter
ptn_save                        ;Pattern number save area
ptn_counter                     ;Pattern counter
w_save                          ;W register save area
s_save                          ;STATUS regi save area
        endc

ra0     equ     00              ;RA0 bit
ra1     equ     01              ;RA1 bit
ra2     equ     02              ;RA2 bit

;**************** Speed control data ********************
speed   equ     1               ;100ms (+1=50ms)

;*************  Brightness control data  ****************
led1    equ     b'11111110'     ;(01) almost dim
led2    equ     b'11111010'     ;(10) less bright
led3    equ     b'11110000'     ;(11) bright

;*************  Pattern Data Definition  ****************
; 1 bright  1 less bright  0 almost dim  0 dim
; 1         0              1             0

;******  Pattern 0  ******
p000    equ     b'00000000'
p001    equ     b'00000000'

p010    equ     b'10000001'
p011    equ     b'10000001'

p020    equ     b'11000011'
p021    equ     b'01000010'

p030    equ     b'01100110'
p031    equ     b'10100101'

p040    equ     b'00111100'
p041    equ     b'01011010'

p050    equ     b'00011000'
p051    equ     b'00111100'

p060    equ     b'00111100'
p061    equ     b'00100100'

p070    equ     b'01100110'
p071    equ     b'01011010'

p080    equ     b'11000011'
p081    equ     b'10100101'

p090    equ     b'10000001'
p091    equ     b'01000010'

p0a0    equ     b'00000000'
p0a1    equ     b'10000001'

;******  Pattern 1  ******
p100    equ     b'00000000'
p101    equ     b'00000000'

p110    equ     b'00000001'
p111    equ     b'00000001'

p120    equ     b'00000011'
p121    equ     b'00000010'

p130    equ     b'00000110'
p131    equ     b'00000101'

p140    equ     b'00001100'
p141    equ     b'00001010'

p150    equ     b'00011000'
p151    equ     b'00010100'

p160    equ     b'00110000'
p161    equ     b'00101000'

p170    equ     b'01100000'
p171    equ     b'01010000'

p180    equ     b'11000000'
p181    equ     b'10100000'

p190    equ     b'10000000'
p191    equ     b'01000000'

p1a0    equ     b'00000000'
p1a1    equ     b'10000000'

;******  Pattern 2  ******
p200    equ     b'00000000'
p201    equ     b'00000000'

p210    equ     b'10000000'
p211    equ     b'10000000'

p220    equ     b'11000000'
p221    equ     b'01000000'

p230    equ     b'01100000'
p231    equ     b'10100000'

p240    equ     b'00110000'
p241    equ     b'01010000'

p250    equ     b'00011000'
p251    equ     b'00101000'

p260    equ     b'00001100'
p261    equ     b'00010100'

p270    equ     b'00000110'
p271    equ     b'00001010'

p280    equ     b'00000011'
p281    equ     b'00000101'

p290    equ     b'00000001'
p291    equ     b'00000010'

p2a0    equ     b'00000000'
p2a1    equ     b'00000001'

;****************  Program Start  ***********************
        org     0               ;Reset Vector
        goto    init
        org     4               ;Interrupt Vector
        goto    int

;******************  Initial Process  *******************
init
;*** Set Port mode
        bsf     status,rp0      ;Change to Bank1
        movlw   b'00000111'     ;RA2-0:IN mode
        movwf   trisa           ;Set TRISA reg
        movlw   b'00000000'     ;RB7-0:OUT mode
        movwf   trisb           ;Set TRISB reg

;*** Set Option reg
        movlw   b'10000111'     ;RBPU=OFF,PSA=0,PS=1:256
        movwf   option_reg      ;Set OPTION_REG
        bcf     status,rp0      ;Change to Bank0

;*** Set work area
        clrf    led_data0       ;Clear LED data0
        clrf    led_data1       ;Clear LED data1
        movlw   led1            ;Read 01 pattern
        movwf   led01           ;Set  01 pattern
        movlw   led2            ;Read 10 pattern
        movwf   led10           ;Set  10 pattern
        movlw   led3            ;Read 11 pattern
        movwf   led11           ;Set  11 pattern
        clrf    port_work       ;Clear LED data save area
        movlw   speed           ;Read speed data
        addlw   d'1'            ;+1 addition
        movwf   counter         ;Set counter
        movlw   d'1'            ;Set pattern data
        movwf   ptn_save        ;Set pattern 0
        clrf    ptn_counter     ;Clear pattern counter

;*** Set TMR0 reg
        movlw   d'61'           ;256-50ms/0.256ms = 61
        movwf   tmr0            ;Set 50msec to TMR0
        movlw   b'10100000'     ;GIE=1,TOIE=1
        movwf   intcon          ;Interruption enable

;****************  LED control Process ******************
loop
        movlw   d'4'            ;Set loop counter data
        movwf   loop_cnt        ;Set loop counter
loop1
        movlw   d'1'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 1 ?
        goto    next2           ;No.
        goto    process4        ;Jump to Process4
next2
        movlw   d'2'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 2 ?
        goto    next3           ;No.
        goto    process3        ;Jump to Process3
next3
        movlw   d'3'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 3 ?
        goto    next4           ;No.
        goto    process2        ;Jump to Process2
next4
        movlw   d'4'            ;Set check data
        subwf   loop_cnt,w      ;Check exec times
        btfss   status,z        ;Counter = 4 ?
        goto    loop            ;No. illegal
        goto    process1        ;Jump to Process1

led_cont
        movfw   port_work       ;Read PORT WORK data
        movwf   portb           ;Set PORTB
next
        decfsz  loop_cnt,f      ;Count down
        goto    loop1           ;Next Process
        goto    loop            ;Next Period

process1
;****************** bit0 for process1 *******************
        btfss   led_data0,0     ;1x ?
        goto    p10_0x          ;No.
        btfss   led_data1,0     ;11 ?
        goto    p10_10          ;Jump to 10 process
        goto    p10_11          ;Jump to 11 process
p10_0x
        btfsc   led_data1,0     ;01 ?
        goto    p10_01          ;Jump to 01 process

p10_00
        goto    p10_set         ;LED off

p10_01
        btfss   led01,0         ;Data = 1 ?
        goto    p10_clear       ;No.
        goto    p10_set         ;Yes.

p10_10
        btfss   led10,0         ;Data = 1 ?
        goto    p10_clear       ;No.
        goto    p10_set         ;Yes.

p10_11
        btfss   led11,0         ;Data = 1 ?
        goto    p10_clear       ;No.

p10_set
        bsf     port_work,0     ;Set bit0
        goto    bit1_process1
p10_clear
        bcf     port_work,0     ;Clear bit0

bit1_process1
;****************** bit1 for process1 *******************
        btfss   led_data0,1     ;1x ?
        goto    p11_0x          ;No.
        btfss   led_data1,1     ;11 ?
        goto    p11_10          ;Jump to 10 process
        goto    p11_11          ;Jump to 11 process
p11_0x
        btfsc   led_data1,1     ;01 ?
        goto    p11_01          ;Jump to 01 process

p11_00
        goto    p11_set         ;LED off

p11_01
        btfss   led01,0         ;Data = 1 ?
        goto    p11_clear       ;No.
        goto    p11_set         ;Yes.

p11_10
        btfss   led10,0         ;Data = 1 ?
        goto    p11_clear       ;No.
        goto    p11_set         ;Yes.

p11_11
        btfss   led11,0         ;Data = 1 ?
        goto    p11_clear       ;No.

p11_set
        bsf     port_work,1     ;Set bit1
        goto    bit2_process1
p11_clear
        bcf     port_work,1     ;Clear bit1

bit2_process1
;****************** bit2 for process1 *******************
        btfss   led_data0,2     ;1x ?
        goto    p12_0x          ;No.
        btfss   led_data1,2     ;11 ?
        goto    p12_10          ;Jump to 10 process
        goto    p12_11          ;Jump to 11 process
p12_0x
        btfsc   led_data1,2     ;01 ?
        goto    p12_01          ;Jump to 01 process

p12_00
        goto    p12_set         ;LED off

p12_01
        btfss   led01,0         ;Data = 1 ?
        goto    p12_clear       ;No.
        goto    p12_set         ;Yes.

p12_10
        btfss   led10,0         ;Data = 1 ?
        goto    p12_clear       ;No.
        goto    p12_set         ;Yes.

p12_11
        btfss   led11,0         ;Data = 1 ?
        goto    p12_clear       ;No.

p12_set
        bsf     port_work,2     ;Set bit2
        goto    bit3_process1
p12_clear
        bcf     port_work,2     ;Clear bit2

bit3_process1
;****************** bit3 for process1 *******************
        btfss   led_data0,3     ;1x ?
        goto    p13_0x          ;No.
        btfss   led_data1,3     ;11 ?
        goto    p13_10          ;Jump to 10 process
        goto    p13_11          ;Jump to 11 process
p13_0x
        btfsc   led_data1,3     ;01 ?
        goto    p13_01          ;Jump to 01 process

p13_00
        goto    p13_set         ;LED off

p13_01
        btfss   led01,0         ;Data = 1 ?
        goto    p13_clear       ;No.
        goto    p13_set         ;Yes.

p13_10
        btfss   led10,0         ;Data = 1 ?
        goto    p13_clear       ;No.
        goto    p13_set         ;Yes.

p13_11
        btfss   led11,0         ;Data = 1 ?
        goto    p13_clear       ;No.

p13_set
        bsf     port_work,3     ;Set bit3
        goto    bit4_process1
p13_clear
        bcf     port_work,3     ;Clear bit3

bit4_process1
;****************** bit4 for process1 *******************
        btfss   led_data0,4     ;1x ?
        goto    p14_0x          ;No.
        btfss   led_data1,4     ;11 ?
        goto    p14_10          ;Jump to 10 process
        goto    p14_11          ;Jump to 11 process
p14_0x
        btfsc   led_data1,4     ;01 ?
        goto    p14_01          ;Jump to 01 process

p14_00
        goto    p14_set         ;LED off

p14_01
        btfss   led01,0         ;Data = 1 ?
        goto    p14_clear       ;No.
        goto    p14_set         ;Yes.

p14_10
        btfss   led10,0         ;Data = 1 ?
        goto    p14_clear       ;No.
        goto    p14_set         ;Yes.

p14_11
        btfss   led11,0         ;Data = 1 ?
        goto    p14_clear       ;No.

p14_set
        bsf     port_work,4     ;Set bit4
        goto    bit5_process1
p14_clear
        bcf     port_work,4     ;Clear bit4

bit5_process1
;****************** bit5 for process1 *******************
        btfss   led_data0,5     ;1x ?
        goto    p15_0x          ;No.
        btfss   led_data1,5     ;11 ?
        goto    p15_10          ;Jump to 10 process
        goto    p15_11          ;Jump to 11 process
p15_0x
        btfsc   led_data1,5     ;01 ?
        goto    p15_01          ;Jump to 01 process

p15_00
        goto    p15_set         ;LED off

p15_01
        btfss   led01,0         ;Data = 1 ?
        goto    p15_clear       ;No.
        goto    p15_set         ;Yes.

p15_10
        btfss   led10,0         ;Data = 1 ?
        goto    p15_clear       ;No.
        goto    p15_set         ;Yes.

p15_11
        btfss   led11,0         ;Data = 1 ?
        goto    p15_clear       ;No.

p15_set
        bsf     port_work,5     ;Set bit5
        goto    bit6_process1
p15_clear
        bcf     port_work,5     ;Clear bit5

bit6_process1
;****************** bit6 for process1 *******************
        btfss   led_data0,6     ;1x ?
        goto    p16_0x          ;No.
        btfss   led_data1,6     ;11 ?
        goto    p16_10          ;Jump to 10 process
        goto    p16_11          ;Jump to 11 process
p16_0x
        btfsc   led_data1,6     ;01 ?
        goto    p16_01          ;Jump to 01 process

p16_00
        goto    p16_set         ;LED off

p16_01
        btfss   led01,0         ;Data = 1 ?
        goto    p16_clear       ;No.
        goto    p16_set         ;Yes.

p16_10
        btfss   led10,0         ;Data = 1 ?
        goto    p16_clear       ;No.
        goto    p16_set         ;Yes.

p16_11
        btfss   led11,0         ;Data = 1 ?
        goto    p16_clear       ;No.

p16_set
        bsf     port_work,6     ;Set bit6
        goto    bit7_process1
p16_clear
        bcf     port_work,6     ;Clear bit6

bit7_process1
;****************** bit7 for process1 *******************
        btfss   led_data0,7     ;1x ?
        goto    p17_0x          ;No.
        btfss   led_data1,7     ;11 ?
        goto    p17_10          ;Jump to 10 process
        goto    p17_11          ;Jump to 11 process
p17_0x
        btfsc   led_data1,7     ;01 ?
        goto    p17_01          ;Jump to 01 process

p17_00
        goto    p7_set          ;LED off

p17_01
        btfss   led01,0         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p17_10
        btfss   led10,0         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p17_11
        btfss   led11,0         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

process2
;****************** bit0 for process2 *******************
        btfss   led_data0,0     ;1x ?
        goto    p20_0x          ;No.
        btfss   led_data1,0     ;11 ?
        goto    p20_10          ;Jump to 10 process
        goto    p20_11          ;Jump to 11 process
p20_0x
        btfsc   led_data1,0     ;01 ?
        goto    p20_01          ;Jump to 01 process

p20_00
        goto    p20_set         ;LED off

p20_01
        btfss   led01,1         ;Data = 1 ?
        goto    p20_clear       ;No.
        goto    p20_set         ;Yes.

p20_10
        btfss   led10,1         ;Data = 1 ?
        goto    p20_clear       ;No.
        goto    p20_set         ;Yes.

p20_11
        btfss   led11,1         ;Data = 1 ?
        goto    p20_clear       ;No.

p20_set
        bsf     port_work,0     ;Set bit0
        goto    bit1_process2
p20_clear
        bcf     port_work,0     ;Clear bit0

bit1_process2
;****************** bit1 for process2 *******************
        btfss   led_data0,1     ;1x ?
        goto    p21_0x          ;No.
        btfss   led_data1,1     ;11 ?
        goto    p21_10          ;Jump to 10 process
        goto    p21_11          ;Jump to 11 process
p21_0x
        btfsc   led_data1,1     ;01 ?
        goto    p21_01          ;Jump to 01 process

p21_00
        goto    p21_set         ;LED off

p21_01
        btfss   led01,1         ;Data = 1 ?
        goto    p21_clear       ;No.
        goto    p21_set         ;Yes.

p21_10
        btfss   led10,1         ;Data = 1 ?
        goto    p21_clear       ;No.
        goto    p21_set         ;Yes.

p21_11
        btfss   led11,1         ;Data = 1 ?
        goto    p21_clear       ;No.

p21_set
        bsf     port_work,1     ;Set bit1
        goto    bit2_process2
p21_clear
        bcf     port_work,1     ;Clear bit1

bit2_process2
;****************** bit2 for process2 *******************
        btfss   led_data0,2     ;1x ?
        goto    p22_0x          ;No.
        btfss   led_data1,2     ;11 ?
        goto    p22_10          ;Jump to 10 process
        goto    p22_11          ;Jump to 11 process
p22_0x
        btfsc   led_data1,2     ;01 ?
        goto    p22_01          ;Jump to 01 process

p22_00
        goto    p22_set         ;LED off

p22_01
        btfss   led01,1         ;Data = 1 ?
        goto    p22_clear       ;No.
        goto    p22_set         ;Yes.

p22_10
        btfss   led10,1         ;Data = 1 ?
        goto    p22_clear       ;No.
        goto    p22_set         ;Yes.

p22_11
        btfss   led11,1         ;Data = 1 ?
        goto    p22_clear       ;No.

p22_set
        bsf     port_work,2     ;Set bit2
        goto    bit3_process2
p22_clear
        bcf     port_work,2     ;Clear bit2

bit3_process2
;****************** bit3 for process2 *******************
        btfss   led_data0,3     ;1x ?
        goto    p23_0x          ;No.
        btfss   led_data1,3     ;11 ?
        goto    p23_10          ;Jump to 10 process
        goto    p23_11          ;Jump to 11 process
p23_0x
        btfsc   led_data1,3     ;01 ?
        goto    p23_01          ;Jump to 01 process

p23_00
        goto    p23_set         ;LED off

p23_01
        btfss   led01,1         ;Data = 1 ?
        goto    p23_clear       ;No.
        goto    p23_set         ;Yes.

p23_10
        btfss   led10,1         ;Data = 1 ?
        goto    p23_clear       ;No.
        goto    p23_set         ;Yes.

p23_11
        btfss   led11,1         ;Data = 1 ?
        goto    p23_clear       ;No.

p23_set
        bsf     port_work,3     ;Set bit3
        goto    bit4_process2
p23_clear
        bcf     port_work,3     ;Clear bit3

bit4_process2
;****************** bit4 for process2 *******************
        btfss   led_data0,4     ;1x ?
        goto    p24_0x          ;No.
        btfss   led_data1,4     ;11 ?
        goto    p24_10          ;Jump to 10 process
        goto    p24_11          ;Jump to 11 process
p24_0x
        btfsc   led_data1,4     ;01 ?
        goto    p24_01          ;Jump to 01 process

p24_00
        goto    p24_set         ;LED off

p24_01
        btfss   led01,1         ;Data = 1 ?
        goto    p24_clear       ;No.
        goto    p24_set         ;Yes.

p24_10
        btfss   led10,1         ;Data = 1 ?
        goto    p24_clear       ;No.
        goto    p24_set         ;Yes.

p24_11
        btfss   led11,1         ;Data = 1 ?
        goto    p24_clear       ;No.

p24_set
        bsf     port_work,4     ;Set bit4
        goto    bit5_process2
p24_clear
        bcf     port_work,4     ;Clear bit4

bit5_process2
;****************** bit5 for process2 *******************
        btfss   led_data0,5     ;1x ?
        goto    p25_0x          ;No.
        btfss   led_data1,5     ;11 ?
        goto    p25_10          ;Jump to 10 process
        goto    p25_11          ;Jump to 11 process
p25_0x
        btfsc   led_data1,5     ;01 ?
        goto    p25_01          ;Jump to 01 process

p25_00
        goto    p25_set         ;LED off

p25_01
        btfss   led01,1         ;Data = 1 ?
        goto    p25_clear       ;No.
        goto    p25_set         ;Yes.

p25_10
        btfss   led10,1         ;Data = 1 ?
        goto    p25_clear       ;No.
        goto    p25_set         ;Yes.

p25_11
        btfss   led11,1         ;Data = 1 ?
        goto    p25_clear       ;No.

p25_set
        bsf     port_work,5     ;Set bit5
        goto    bit6_process2
p25_clear
        bcf     port_work,5     ;Clear bit5

bit6_process2
;****************** bit6 for process2 *******************
        btfss   led_data0,6     ;1x ?
        goto    p26_0x          ;No.
        btfss   led_data1,6     ;11 ?
        goto    p26_10          ;Jump to 10 process
        goto    p26_11          ;Jump to 11 process
p26_0x
        btfsc   led_data1,6     ;01 ?
        goto    p26_01          ;Jump to 01 process

p26_00
        goto    p26_set         ;LED off
p26_01
        btfss   led01,1         ;Data = 1 ?
        goto    p26_clear       ;No.
        goto    p26_set         ;Yes.

p26_10
        btfss   led10,1         ;Data = 1 ?
        goto    p26_clear       ;No.
        goto    p26_set         ;Yes.

p26_11
        btfss   led11,1         ;Data = 1 ?
        goto    p26_clear       ;No.

p26_set
        bsf     port_work,6     ;Set bit6
        goto    bit7_process2
p26_clear
        bcf     port_work,6     ;Clear bit6

bit7_process2
;****************** bit7 for process2 *******************
        btfss   led_data0,7     ;1x ?
        goto    p27_0x          ;No.
        btfss   led_data1,7     ;11 ?
        goto    p27_10          ;Jump to 10 process
        goto    p27_11          ;Jump to 11 process
p27_0x
        btfsc   led_data1,7     ;01 ?
        goto    p27_01          ;Jump to 01 process

p27_00
        goto    p7_set          ;LED off

p27_01
        btfss   led01,1         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p27_10
        btfss   led10,1         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p27_11
        btfss   led11,1         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

process3
;****************** bit0 for process3 *******************
        btfss   led_data0,0     ;1x ?
        goto    p30_0x          ;No.
        btfss   led_data1,0     ;11 ?
        goto    p30_10          ;Jump to 10 process
        goto    p30_11          ;Jump to 11 process
p30_0x
        btfsc   led_data1,0     ;01 ?
        goto    p30_01          ;Jump to 01 process

p30_00
        goto    p30_set         ;LED off

p30_01
        btfss   led01,2         ;Data = 1 ?
        goto    p30_clear       ;No.
        goto    p30_set         ;Yes.

p30_10
        btfss   led10,2         ;Data = 1 ?
        goto    p30_clear       ;No.
        goto    p30_set         ;Yes.

p30_11
        btfss   led11,2         ;Data = 1 ?
        goto    p30_clear       ;No.

p30_set
        bsf     port_work,0     ;Set bit0
        goto    bit1_process3
p30_clear
        bcf     port_work,0     ;Clear bit0

bit1_process3
;****************** bit1 for process3 *******************
        btfss   led_data0,1     ;1x ?
        goto    p31_0x          ;No.
        btfss   led_data1,1     ;11 ?
        goto    p31_10          ;Jump to 10 process
        goto    p31_11          ;Jump to 11 process
p31_0x
        btfsc   led_data1,1     ;01 ?
        goto    p31_01          ;Jump to 01 process

p31_00
        goto    p31_set         ;LED off

p31_01
        btfss   led01,2         ;Data = 1 ?
        goto    p31_clear       ;No.
        goto    p31_set         ;Yes.

p31_10
        btfss   led10,2         ;Data = 1 ?
        goto    p31_clear       ;No.
        goto    p31_set         ;Yes.

p31_11
        btfss   led11,2         ;Data = 1 ?
        goto    p31_clear       ;No.

p31_set
        bsf     port_work,1     ;Set bit1
        goto    bit2_process3
p31_clear
        bcf     port_work,1     ;Clear bit1

bit2_process3
;****************** bit2 for process3 *******************
        btfss   led_data0,2     ;1x ?
        goto    p32_0x          ;No.
        btfss   led_data1,2     ;11 ?
        goto    p32_10          ;Jump to 10 process
        goto    p32_11          ;Jump to 11 process
p32_0x
        btfsc   led_data1,2     ;01 ?
        goto    p32_01          ;Jump to 01 process

p32_00
        goto    p32_set         ;LED off

p32_01
        btfss   led01,2         ;Data = 1 ?
        goto    p32_clear       ;No.
        goto    p32_set         ;Yes.

p32_10
        btfss   led10,2         ;Data = 1 ?
        goto    p32_clear       ;No.
        goto    p32_set         ;Yes.

p32_11
        btfss   led11,2         ;Data = 1 ?
        goto    p32_clear       ;No.

p32_set
        bsf     port_work,2     ;Set bit2
        goto    bit3_process3
p32_clear
        bcf     port_work,2     ;Clear bit2

bit3_process3
;****************** bit3 for process3 *******************
        btfss   led_data0,3     ;1x ?
        goto    p33_0x          ;No.
        btfss   led_data1,3     ;11 ?
        goto    p33_10          ;Jump to 10 process
        goto    p33_11          ;Jump to 11 process
p33_0x
        btfsc   led_data1,3     ;01 ?
        goto    p33_01          ;Jump to 01 process

p33_00
        goto    p33_set         ;LED off

p33_01
        btfss   led01,2         ;Data = 1 ?
        goto    p33_clear       ;No.
        goto    p33_set         ;Yes.

p33_10
        btfss   led10,2         ;Data = 1 ?
        goto    p33_clear       ;No.
        goto    p33_set         ;Yes.

p33_11
        btfss   led11,2         ;Data = 1 ?
        goto    p33_clear       ;No.

p33_set
        bsf     port_work,3     ;Set bit3
        goto    bit4_process3
p33_clear
        bcf     port_work,3     ;Clear bit3

bit4_process3
;****************** bit4 for process3 *******************
        btfss   led_data0,4     ;1x ?
        goto    p34_0x          ;No.
        btfss   led_data1,4     ;11 ?
        goto    p34_10          ;Jump to 10 process
        goto    p34_11          ;Jump to 11 process
p34_0x
        btfsc   led_data1,4     ;01 ?
        goto    p34_01          ;Jump to 01 process

p34_00
        goto    p34_set         ;LED off

p34_01
        btfss   led01,2         ;Data = 1 ?
        goto    p34_clear       ;No.
        goto    p34_set         ;Yes.

p34_10
        btfss   led10,2         ;Data = 1 ?
        goto    p34_clear       ;No.
        goto    p34_set         ;Yes.

p34_11
        btfss   led11,2         ;Data = 1 ?
        goto    p34_clear       ;No.

p34_set
        bsf     port_work,4     ;Set bit4
        goto    bit5_process3
p34_clear
        bcf     port_work,4     ;Clear bit4

bit5_process3
;****************** bit5 for process3 *******************
        btfss   led_data0,5     ;1x ?
        goto    p35_0x          ;No.
        btfss   led_data1,5     ;11 ?
        goto    p35_10          ;Jump to 10 process
        goto    p35_11          ;Jump to 11 process
p35_0x
        btfsc   led_data1,5     ;01 ?
        goto    p35_01          ;Jump to 01 process

p35_00
        goto    p35_set         ;LED off

p35_01
        btfss   led01,2         ;Data = 1 ?
        goto    p35_clear       ;No.
        goto    p35_set         ;Yes.

p35_10
        btfss   led10,2         ;Data = 1 ?
        goto    p35_clear       ;No.
        goto    p35_set         ;Yes.

p35_11
        btfss   led11,2         ;Data = 1 ?
        goto    p35_clear       ;No.

p35_set
        bsf     port_work,5     ;Set bit5
        goto    bit6_process3
p35_clear
        bcf     port_work,5     ;Clear bit5

bit6_process3
;****************** bit6 for process3 *******************
        btfss   led_data0,6     ;1x ?
        goto    p36_0x          ;No.
        btfss   led_data1,6     ;11 ?
        goto    p36_10          ;Jump to 10 process
        goto    p36_11          ;Jump to 11 process
p36_0x
        btfsc   led_data1,6     ;01 ?
        goto    p36_01          ;Jump to 01 process

p36_00
        goto    p36_set         ;LED off

p36_01
        btfss   led01,2         ;Data = 1 ?
        goto    p36_clear       ;No.
        goto    p36_set         ;Yes.

p36_10
        btfss   led10,2         ;Data = 1 ?
        goto    p36_clear       ;No.
        goto    p36_set         ;Yes.

p36_11
        btfss   led11,2         ;Data = 1 ?
        goto    p36_clear       ;No.

p36_set
        bsf     port_work,6     ;Set bit6
        goto    bit7_process3
p36_clear
        bcf     port_work,6     ;Clear bit6

bit7_process3
;****************** bit7 for process3 *******************
        btfss   led_data0,7     ;1x ?
        goto    p37_0x          ;No.
        btfss   led_data1,7     ;11 ?
        goto    p37_10          ;Jump to 10 process
        goto    p37_11          ;Jump to 11 process
p37_0x
        btfsc   led_data1,7     ;01 ?
        goto    p37_01          ;Jump to 01 process

p37_00
        goto    p7_set          ;LED off
p37_01
        btfss   led01,2         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p37_10
        btfss   led10,2         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p37_11
        btfss   led11,2         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

process4
;****************** bit0 for process4 *******************
        btfss   led_data0,0     ;1x ?
        goto    p40_0x          ;No.
        btfss   led_data1,0     ;11 ?
        goto    p40_10          ;Jump to 10 process
        goto    p40_11          ;Jump to 11 process
p40_0x
        btfsc   led_data1,0     ;01 ?
        goto    p40_01          ;Jump to 01 process

p40_00
        goto    p40_set         ;LED off

p40_01
        btfss   led01,3         ;Data = 1 ?
        goto    p40_clear       ;No.
        goto    p40_set         ;Yes.

p40_10
        btfss   led10,3         ;Data = 1 ?
        goto    p40_clear       ;No.
        goto    p40_set         ;Yes.

p40_11
        btfss   led11,3         ;Data = 1 ?
        goto    p40_clear       ;No.

p40_set
        bsf     port_work,0     ;Set bit0
        goto    bit1_process4
p40_clear
        bcf     port_work,0     ;Clear bit0

bit1_process4
;****************** bit1 for process4 *******************
        btfss   led_data0,1     ;1x ?
        goto    p41_0x          ;No.
        btfss   led_data1,1     ;11 ?
        goto    p41_10          ;Jump to 10 process
        goto    p41_11          ;Jump to 11 process
p41_0x
        btfsc   led_data1,1     ;01 ?
        goto    p41_01          ;Jump to 01 process

p41_00
        goto    p41_set         ;LED off

p41_01
        btfss   led01,3         ;Data = 1 ?
        goto    p41_clear       ;No.
        goto    p41_set         ;Yes.

p41_10
        btfss   led10,3         ;Data = 1 ?
        goto    p41_clear       ;No.
        goto    p41_set         ;Yes.

p41_11
        btfss   led11,3         ;Data = 1 ?
        goto    p41_clear       ;No.

p41_set
        bsf     port_work,1     ;Set bit1
        goto    bit2_process4
p41_clear
        bcf     port_work,1     ;Clear bit1

bit2_process4
;****************** bit2 for process4 *******************
        btfss   led_data0,2     ;1x ?
        goto    p42_0x          ;No.
        btfss   led_data1,2     ;11 ?
        goto    p42_10          ;Jump to 10 process
        goto    p42_11          ;Jump to 11 process
p42_0x
        btfsc   led_data1,2     ;01 ?
        goto    p42_01          ;Jump to 01 process

p42_00
        goto    p42_set         ;LED off

p42_01
        btfss   led01,3         ;Data = 1 ?
        goto    p42_clear       ;No.
        goto    p42_set         ;Yes.

p42_10
        btfss   led10,3         ;Data = 1 ?
        goto    p42_clear       ;No.
        goto    p42_set         ;Yes.

p42_11
        btfss   led11,3         ;Data = 1 ?
        goto    p42_clear       ;No.

p42_set
        bsf     port_work,2     ;Set bit2
        goto    bit3_process4
p42_clear
        bcf     port_work,2     ;Clear bit2

bit3_process4
;****************** bit3 for process4 *******************
        btfss   led_data0,3     ;1x ?
        goto    p43_0x          ;No.
        btfss   led_data1,3     ;11 ?
        goto    p43_10          ;Jump to 10 process
        goto    p43_11          ;Jump to 11 process
p43_0x
        btfsc   led_data1,3     ;01 ?
        goto    p43_01          ;Jump to 01 process

p43_00
        goto    p43_set         ;LED off

p43_01
        btfss   led01,3         ;Data = 1 ?
        goto    p43_clear       ;No.
        goto    p43_set         ;Yes.

p43_10
        btfss   led10,3         ;Data = 1 ?
        goto    p43_clear       ;No.
        goto    p43_set         ;Yes.

p43_11
        btfss   led11,3         ;Data = 1 ?
        goto    p43_clear       ;No.

p43_set
        bsf     port_work,3     ;Set bit3
        goto    bit4_process4
p43_clear
        bcf     port_work,3     ;Clear bit3

bit4_process4
;****************** bit4 for process4 *******************
        btfss   led_data0,4     ;1x ?
        goto    p44_0x          ;No.
        btfss   led_data1,4     ;11 ?
        goto    p44_10          ;Jump to 10 process
        goto    p44_11          ;Jump to 11 process
p44_0x
        btfsc   led_data1,4     ;01 ?
        goto    p44_01          ;Jump to 01 process

p44_00
        goto    p44_set         ;LED off

p44_01
        btfss   led01,3         ;Data = 1 ?
        goto    p44_clear       ;No.
        goto    p44_set         ;Yes.

p44_10
        btfss   led10,3         ;Data = 1 ?
        goto    p44_clear       ;No.
        goto    p44_set         ;Yes.

p44_11
        btfss   led11,3         ;Data = 1 ?
        goto    p44_clear       ;No.

p44_set
        bsf     port_work,4     ;Set bit4
        goto    bit5_process4
p44_clear
        bcf     port_work,4     ;Clear bit4

bit5_process4
;****************** bit5 for process4 *******************
        btfss   led_data0,5     ;1x ?
        goto    p45_0x          ;No.
        btfss   led_data1,5     ;11 ?
        goto    p45_10          ;Jump to 10 process
        goto    p45_11          ;Jump to 11 process
p45_0x
        btfsc   led_data1,5     ;01 ?
        goto    p45_01          ;Jump to 01 process

p45_00
        goto    p45_set         ;LED off

p45_01
        btfss   led01,3         ;Data = 1 ?
        goto    p45_clear       ;No.
        goto    p45_set         ;Yes.

p45_10
        btfss   led10,3         ;Data = 1 ?
        goto    p45_clear       ;No.
        goto    p45_set         ;Yes.

p45_11
        btfss   led11,3         ;Data = 1 ?
        goto    p45_clear       ;No.

p45_set
        bsf     port_work,5     ;Set bit5
        goto    bit6_process4
p45_clear
        bcf     port_work,5     ;Clear bit5

bit6_process4
;****************** bit6 for process4 *******************
        btfss   led_data0,6     ;1x ?
        goto    p46_0x          ;No.
        btfss   led_data1,6     ;11 ?
        goto    p46_10          ;Jump to 10 process
        goto    p46_11          ;Jump to 11 process
p46_0x
        btfsc   led_data1,6     ;01 ?
        goto    p46_01          ;Jump to 01 process

p46_00
        goto    p46_set         ;LED off

p46_01
        btfss   led01,3         ;Data = 1 ?
        goto    p46_clear       ;No.
        goto    p46_set         ;Yes.

p46_10
        btfss   led10,3         ;Data = 1 ?
        goto    p46_clear       ;No.
        goto    p46_set         ;Yes.

p46_11
        btfss   led11,3         ;Data = 1 ?
        goto    p46_clear       ;No.

p46_set
        bsf     port_work,6     ;Set bit6
        goto    bit7_process4
p46_clear
        bcf     port_work,6     ;Clear bit6

bit7_process4
;****************** bit7 for process4 *******************
        btfss   led_data0,7     ;1x ?
        goto    p47_0x          ;No.
        btfss   led_data1,7     ;11 ?
        goto    p47_10          ;Jump to 10 process
        goto    p47_11          ;Jump to 11 process
p47_0x
        btfsc   led_data1,7     ;01 ?
        goto    p47_01          ;Jump to 01 process

p47_00
        goto    p7_set          ;LED off

p47_01
        btfss   led01,3         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p47_10
        btfss   led10,3         ;Data = 1 ?
        goto    p7_clear        ;No.
        goto    p7_set          ;Yes.

p47_11
        btfss   led11,3         ;Data = 1 ?
        goto    p7_clear        ;No.

p7_set
        bsf     port_work,7     ;Set bit7
        goto    led_cont
p7_clear
        bcf     port_work,7     ;Clear bit7
        goto    led_cont

int
;**********  Interruption process beginning *************
        movwf   w_save          ;Save W register
        movfw   status          ;Read STATUS reg
        movwf   s_save          ;Save STATUS reg
        btfsc   intcon,t0if     ;Time out interruption ?
        goto    timer_int       ;Jump to Time-out
        goto    init            ;Reset(Illegal interrupt)

int_end
;************  END of interruption process **************
        movfw   s_save          ;Read saved STATUS reg
        movwf   status          ;Recover STATUS reg
        swapf   w_save,f        ;Read saved W register
        swapf   w_save,w        ;Recover W register
        retfie

timer_int
;*****  Timer interruption process (50ms interval) ******
        bcf     intcon,t0if     ;Clear timer int flag
        movlw   d'61'           ;Set timer value
        movwf   tmr0            ;TMR0 = 50ms

;******************  Key Scan Process *******************
        btfsc   porta,ra0       ;RA0 ON(Low lebel) ?
        goto    key0            ;No.
        movlw   d'2'            ;Set pattern 1 data
        goto    key2            ;Pattern exec
key0
        btfsc   porta,ra1       ;RA1 ON ?
        goto    key1            ;No.
        movlw   d'1'            ;Set pattern 0 data
        goto    key2            ;Pattern exec
key1
        btfsc   porta,ra2       ;RA2 ON ?
        goto    key3            ;No.
        movlw   d'3'            ;Set pattern 2 data
key2
        movwf   ptn_save        ;Save pattern
key3
        decfsz  counter,f       ;Count out ?
        goto    int_end         ;Next Period

;*****************  Pattern Process *********************
        movlw   speed           ;Read speed data
        addlw   d'1'            ;+1 addition
        movwf   counter         ;Set counter
        movlw   d'1'            ;Set pattern number
        subwf   ptn_save,w      ;Check pattern number
        btfsc   status,z        ;Pattern 0 ?
        goto    ptn0            ;Jump to pattern 0
        movlw   d'2'            ;Set pattern number
        subwf   ptn_save,w      ;Check pattern number
        btfsc   status,z        ;Pattern 1 ?
        goto    ptn1            ;Jump to pattern 1
        movlw   d'3'            ;Set pattern number
        subwf   ptn_save,w      ;Check pattern number
        btfsc   status,z        ;Pattern 2 ?
        goto    ptn2            ;Jump to pattern 2

ptn0
;*********************  Pattren 0 ***********************
        movlw   d'1'            ;Set pattern number
        subwf   ptn_save,w      ;Check pattern number
        btfss   status,z        ;Same ?
ptn0_clear
        clrf    ptn_counter     ;Clear pattern counter
ptn0_head
        movlw   d'1'            ;Set pattern number
        movwf   ptn_save        ;Save pattern number
        movfw   ptn_counter     ;Read pattern counter
        btfsc   status,z        ;Counter = 0 ?
        goto    ptn0_0          ;Yes
        movlw   d'1'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 1 ?
        goto    ptn0_1          ;Yes
        movlw   d'2'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 2 ?
        goto    ptn0_2          ;Yes
        movlw   d'3'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 3 ?
        goto    ptn0_3          ;Yes
        movlw   d'4'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 4 ?
        goto    ptn0_4          ;Yes
        movlw   d'5'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 5 ?
        goto    ptn0_5          ;Yes
        movlw   d'6'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 6 ?
        goto    ptn0_6          ;Yes
        movlw   d'7'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 7 ?
        goto    ptn0_7          ;Yes
        movlw   d'8'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 8 ?
        goto    ptn0_8          ;Yes
        movlw   d'9'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 9 ?
        goto    ptn0_9          ;Yes
        movlw   d'10'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 10 ?
        goto    ptn0_10         ;Yes
        goto    ptn0_clear      ;Repeat

ptn0_0
        clrf    led_data0
        clrf    led_data1
        goto    p_countup       ;Jump to count up
ptn0_1
        movlw   p010            ;Set 1st upper data
        movwf   led_data0
        movlw   p011            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_2
        movlw   p020            ;Set 1st upper data
        movwf   led_data0
        movlw   p021            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_3
        movlw   p030            ;Set 1st upper data
        movwf   led_data0
        movlw   p031            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_4
        movlw   p040            ;Set 1st upper data
        movwf   led_data0
        movlw   p041            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_5
        movlw   p050            ;Set 1st upper data
        movwf   led_data0
        movlw   p051            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_6
        movlw   p060            ;Set 1st upper data
        movwf   led_data0
        movlw   p061            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_7
        movlw   p070            ;Set 1st upper data
        movwf   led_data0
        movlw   p071            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_8
        movlw   p080            ;Set 1st upper data
        movwf   led_data0
        movlw   p081            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_9
        movlw   p090            ;Set 1st upper data
        movwf   led_data0
        movlw   p091            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn0_10
        movlw   p0a0            ;Set 1st upper data
        movwf   led_data0
        movlw   p0a1            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up

ptn1
;*********************  Pattren 1 ***********************
        movlw   d'2'            ;Set pattern number
        subwf   ptn_save,w      ;Check pattern number
        btfss   status,z        ;Same ?
ptn1_clear
        clrf    ptn_counter     ;Clear pattern counter
ptn1_head
        movlw   d'2'            ;Set pattern number
        movwf   ptn_save        ;Save pattern number
        movfw   ptn_counter     ;Read pattern counter
        btfsc   status,z        ;Counter = 0 ?
        goto    ptn1_0          ;Yes
        movlw   d'1'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 1 ?
        goto    ptn1_1          ;Yes
        movlw   d'2'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 2 ?
        goto    ptn1_2          ;Yes
        movlw   d'3'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 3 ?
        goto    ptn1_3          ;Yes
        movlw   d'4'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 4 ?
        goto    ptn1_4          ;Yes
        movlw   d'5'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 5 ?
        goto    ptn1_5          ;Yes
        movlw   d'6'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 6 ?
        goto    ptn1_6          ;Yes
        movlw   d'7'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 7 ?
        goto    ptn1_7          ;Yes
        movlw   d'8'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 8 ?
        goto    ptn1_8          ;Yes
        movlw   d'9'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 9 ?
        goto    ptn1_9          ;Yes
        movlw   d'10'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 10 ?
        goto    ptn1_10         ;Yes
        goto    ptn1_clear      ;Repeat

ptn1_0
        clrf    led_data0
        clrf    led_data1
        goto    p_countup       ;Jump to count up
ptn1_1
        movlw   p110            ;Set 1st upper data
        movwf   led_data0
        movlw   p111            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_2
        movlw   p120            ;Set 1st upper data
        movwf   led_data0
        movlw   p121            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_3
        movlw   p130            ;Set 1st upper data
        movwf   led_data0
        movlw   p131            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_4
        movlw   p140            ;Set 1st upper data
        movwf   led_data0
        movlw   p141            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_5
        movlw   p150            ;Set 1st upper data
        movwf   led_data0
        movlw   p151            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_6
        movlw   p160            ;Set 1st upper data
        movwf   led_data0
        movlw   p161            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_7
        movlw   p170            ;Set 1st upper data
        movwf   led_data0
        movlw   p171            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_8
        movlw   p180            ;Set 1st upper data
        movwf   led_data0
        movlw   p181            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_9
        movlw   p190            ;Set 1st upper data
        movwf   led_data0
        movlw   p191            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn1_10
        movlw   p1a0            ;Set 1st upper data
        movwf   led_data0
        movlw   p1a1            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up

ptn2
;*********************  Pattren 2 ***********************
        movlw   d'3'            ;Set pattern number
        subwf   ptn_save,w      ;Check pattern number
        btfss   status,z        ;Same ?
ptn2_clear
        clrf    ptn_counter     ;Clear pattern counter
ptn2_head
        movlw   d'3'            ;Set pattern number
        movwf   ptn_save        ;Save pattern number
        movfw   ptn_counter     ;Read pattern counter
        btfsc   status,z        ;Counter = 0 ?
        goto    ptn2_0          ;Yes
        movlw   d'1'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 1 ?
        goto    ptn2_1          ;Yes
        movlw   d'2'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 2 ?
        goto    ptn2_2          ;Yes
        movlw   d'3'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 3 ?
        goto    ptn2_3          ;Yes
        movlw   d'4'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 4 ?
        goto    ptn2_4          ;Yes
        movlw   d'5'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 5 ?
        goto    ptn2_5          ;Yes
        movlw   d'6'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 6 ?
        goto    ptn2_6          ;Yes
        movlw   d'7'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 7 ?
        goto    ptn2_7          ;Yes
        movlw   d'8'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 8 ?
        goto    ptn2_8          ;Yes
        movlw   d'9'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 9 ?
        goto    ptn2_9          ;Yes
        movlw   d'10'            ;Set check data
        subwf   ptn_counter,w   ;Check counter
        btfsc   status,z        ;Counter = 10 ?
        goto    ptn2_10         ;Yes
        goto    ptn2_clear      ;Repeat

ptn2_0
        clrf    led_data0
        clrf    led_data1
        goto    p_countup       ;Jump to count up
ptn2_1
        movlw   p210            ;Set 1st upper data
        movwf   led_data0
        movlw   p211            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_2
        movlw   p220            ;Set 1st upper data
        movwf   led_data0
        movlw   p221            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_3
        movlw   p230            ;Set 1st upper data
        movwf   led_data0
        movlw   p231            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_4
        movlw   p240            ;Set 1st upper data
        movwf   led_data0
        movlw   p241            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_5
        movlw   p250            ;Set 1st upper data
        movwf   led_data0
        movlw   p251            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_6
        movlw   p260            ;Set 1st upper data
        movwf   led_data0
        movlw   p261            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_7
        movlw   p270            ;Set 1st upper data
        movwf   led_data0
        movlw   p271            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_8
        movlw   p280            ;Set 1st upper data
        movwf   led_data0
        movlw   p281            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_9
        movlw   p290            ;Set 1st upper data
        movwf   led_data0
        movlw   p291            ;Set 1st lower data
        movwf   led_data1
        goto    p_countup       ;Jump to count up
ptn2_10
        movlw   p2a0            ;Set 1st upper data
        movwf   led_data0
        movlw   p2a1            ;Set 1st lower data
        movwf   led_data1

p_countup
        incf    ptn_counter,f   ;pattern counter count up
        goto    int_end         ;Next Period

;********************************************************
;          END of LED flash control 2 process
;********************************************************

        end

led2_hex.zip