--_003_55E062692090609yahoocombr_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi Josh! I did not know BAM, but after I read your post I found it interesting, so I wrote some code to test an idea. It seems to be working OK, please see the attached file. Cheers, Isaac Em 27/08/2015 11:10, Josh Koffman escreveu: > Hi all, > > Amongst all the other things on my plate right now, I'd like to make a > small library to do Bit Angle Modulation on some of my projects. I > made one years ago in assembly, but now I'd like to do it in XC8. > > For reference, there are some great posts on BAM on the PicBasic forums h= ere: > > http://www.picbasic.co.uk/forum/showthread.php?p=3D45597 > http://www.picbasic.co.uk/forum/showthread.php?t=3D10564 > > Because the PIC will be doing many things, I am considering using a > high priority interrupt for the BAM, but keeping my high priority ISR > as small as possible (which is probably a good idea regardless). To > accomplish this, I want to create the 8 "slices" that I will output in > my main line, so that all the BAM ISR has to do is take that variable > and put it on the port. > > My question is, what would be the best way to handle this in C? When I > did it in assembly I used a rotate (rotate right if I remember > correctly), then read the carry bit. But then I was also doing it at > the moment of outputting, so there was no intermediate stored > variable. > > My current thought is to define a typedef that lets me access the > individual bits, then a bunch of if/else statements that check the bit > of the source value, and if it's a 1 set the bit of the corresponding > "slice" variable. This would result in a lot of if statements though, > so I'm wondering if there's a slicker way to do this. > > I'm trying to avoid dropping into ASM to do this for a few reasons. > > Any thoughts? > > Thanks! > > Josh --_003_55E062692090609yahoocombr_ Content-Type: text/plain; name="BAM.c" Content-Description: BAM.c Content-Disposition: attachment; filename="BAM.c"; size=4940; creation-date="Fri, 28 Aug 2015 13:39:21 GMT"; modification-date="Fri, 28 Aug 2015 13:39:21 GMT" Content-Transfer-Encoding: base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ki8NCi8qDQogQ29weXJpZ2h0IChjKSAyMDE1LCBJc2FhYyBN YXJpbm8gQmF2YXJlc2NvDQogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCg0KIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgbWV0Og0KICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAqIE5laXRo ZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlDQogICAgICAgbmFtZXMgb2YgaXRzIGNv bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAg ICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4NCg0KIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV VEhPUiAnJ0FTIElTJycgQU5EIEFOWQ0KIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCiBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF DQogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S IEFOWQ0KIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg Q0FVU0VEIEFORA0KIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCiBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4NCiovDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLyoNClBST0NFU1NPUjoJCVBJQzE2RjY0 OEENCkNMT0NLOgkJCTIwIE1Ieg0KQkFNIGZyZXF1ZW5jeToJMTAwIEh6IChhcHByb3hpbWF0ZWx5 KQ0KKi8NCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQojaW5jbHVkZSA8cGljLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+DQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KI2RlZmluZQlUYXNrU3RhcnQo KQlzdGF0aWMgdW5zaWduZWQgaW50IF9fU3RhdGUgPSAwOyBzd2l0Y2goIF9fU3RhdGUgKXsgZGVm YXVsdDogY2FzZSAwOiA7DQojZGVmaW5lCVRhc2tFbmQoKQl9DQojZGVmaW5lCVlpZWxkKCkJCWRv IHsgX19TdGF0ZSA9IF9fTElORV9fOyByZXR1cm47IGNhc2UgX19MSU5FX186IDsgfSB3aGlsZSgg MCApDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLyogSG9sZCB0aGUgdmFsdWVzIGZvciB0aGUg QkFNIGNoYW5uZWxzICovDQp1bnNpZ25lZCBjaGFyCUJBTVZhbHVlc1s4XTsNCi8qPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSovDQovKiBUaGUgdmFsdWUgd2FzIHJvdW5kZWQgdG8gYSBtdWx0aXBsZSBvZiAy NTYgKi8NCiNkZWZpbmUJQkFNX1BFUklPRAk0OTkyMA0KLyo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8N CnZvaWQgQkFNKCB2b2lkICkNCgl7DQoJc3RhdGljIHNpZ25lZCBjaGFyCQlCaXQ7DQoJc3RhdGlj IHVuc2lnbmVkIGNoYXIJQkFNU2hhZG93c1s4XTsNCglzdGF0aWMgdW5zaWduZWQgY2hhcglPdXRw dXRzOw0KCXN0YXRpYyB1bnNpZ25lZCBzaG9ydAlTbGljZUxlbmd0aDsNCglzdGF0aWMgdW5zaWdu ZWQgc2hvcnQJQ0NQUjFTaGFkb3c7DQoJdW5zaWduZWQgY2hhcgkJCUNoYW5uZWw7DQoNCgkvKiBN YWdpYy4uLiAqLw0KCVRhc2tTdGFydCgpOw0KDQoJLyogVGhlIHZlcnkgZmlyc3QgaW50ZXJydXB0 IGRvZXMgbm90IGJlbG9uZyB0byBhbnkgQkFNIGN5Y2xlLg0KCSAgIFdlIHdpbGwgbmV2ZXIgcmVh Y2ggaGVyZSBhZ2FpbiB3aXRob3V0IGEgQ1BVIHJlc2V0Lg0KDQoJICAgVGhlIGZpcnN0IEJBTSBj eWNsZSBpcyBkdW1teSwgYWxsIHZhbHVlcyBhcmUgemVyby4NCgkqLw0KCVNsaWNlTGVuZ3RoCT0g QkFNX1BFUklPRDsNCg0KCXdoaWxlKCAxICkNCgkJew0KCQkvKiBJdGVyYXRlIHRocm91Z2ggYWxs IGJpdHMgb2YgdGhlIEJBTSB2YWx1ZXMgKi8NCgkJZm9yKCBCaXQgPSA3OyBCaXQgPj0gMDsgQml0 LS0gKQ0KCQkJew0KCQkJLyogQ2xlYXIgJ091dHB1dHMnIGp1c3QgdG8gZW5zdXJlIHRoZSByaWdo dC1zaGlmdHMgd2lsbCBub3QNCgkJCSAgIHdhbGsgYSBNU0IgPSAnMScgKHByb2JhYmx5IG5vdCBu ZWNlc3NhcnkpDQoJCQkqLw0KCQkJT3V0cHV0cwkJPSAwOw0KCQkJLyogQ29weSBvbmUgYml0IGZy b20gZWFjaCBzaGFkb3cgdG8gdGhlIG91dHB1dCB2YWx1ZSAqLw0KCQkJZm9yKCBDaGFubmVsID0g MDsgQ2hhbm5lbCA8IDg7IENoYW5uZWwrKyApDQoJCQkJew0KCQkJCU91dHB1dHMJICA+Pj0gMTsN CgkJCQlPdXRwdXRzCSAgIHw9IEJBTVNoYWRvd3NbQ2hhbm5lbF0gJiAweDgwOw0KCQkJCUJBTVNo YWRvd3NbQ2hhbm5lbF0gPDw9IDE7DQoJCQkJfQ0KCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lIG9m IHRoZSBuZXh0IGludGVycnVwdCAqLw0KCQkJQ0NQUjFTaGFkb3cJICAgKz0gU2xpY2VMZW5ndGg7 DQoJCQkvKiBTZXQgdGhlIENDUFIgbW9kdWxlIHRvIGludGVycnVwdCBhdCB0aGUgY29ycmVjdCB0 aW1lICovDQoJCQlDQ1BSMUwJCQk9ICh1bnNpZ25lZCBjaGFyKSggQ0NQUjFTaGFkb3cgPj4gMCAp Ow0KCQkJQ0NQUjFICQkJPSAodW5zaWduZWQgY2hhcikoIENDUFIxU2hhZG93ID4+IDggKTsNCgkJ CS8qIEhlcmUgd2UgZXhpdCBmcm9tIHRoZSBJU1IuLiAqLw0KCQkJWWllbGQoKTsNCgkJCS8qIC4u LiB0byBtYWdpY2FsbHkgY29tZSBiYWNrIGhlcmUgYWZ0ZXIgdGhlIENDUDEgZGVsYXkuICovDQoJ CQkvKiBPdXRwdXQgdGhlIGN1cnJlbnQgYml0IHZhbHVlcyAqLw0KCQkJUE9SVEIJCQk9IE91dHB1 dHM7DQoJCQkvKiBUaGUgbmV4dCBkZWxheSB3aWxsIGJlIGhhbGYgdGhlIGxlbmd0aCBvZiB0aGUg cHJldmlvdXMgb25lICovDQoJCQlTbGljZUxlbmd0aAkgID4+PSAxOw0KCQkJfQ0KCQkvKiBDb3B5 IHRoZSBjdXJyZW50IEJBTSB2YWx1ZXMgdG8gc3RhcnQgYSBuZXcgY3ljbGUgKi8NCgkJbWVtY3B5 KCAmQkFNU2hhZG93cywgJkJBTVZhbHVlcywgc2l6ZW9mIEJBTVNoYWRvd3MgKTsNCgkJLyogVGhl IGZpcnN0IGJpdCBvZiB0aGUgY3ljbGUgdGFrZXMgaGFsZiB0aGUgdG90YWwgdGltZSAqLw0KCQlT bGljZUxlbmd0aAk9IEJBTV9QRVJJT0QgLyAyOw0KCQl9DQoNCgkvKiBNYWdpYy4uLiAqLw0KCVRh c2tFbmQoKTsNCgl9DQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0Kdm9pZCBpbnRlcnJ1cHQgSVNS KCB2b2lkICkNCgl7DQoJaWYoIENDUDFJRiAmJiBDQ1AxSUUgKQ0KCQl7DQoJCUNDUDFJRgk9IDA7 DQoJCUJBTSgpOw0KCQl9DQoJfQ0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCnZvaWQgbWFpbigg dm9pZCApDQoJew0KCUNNQ09OCT0gMHgwNzsNCg0KCVBPUlRBCT0gMDsNCglQT1JUQgk9IDA7DQoN CglUUklTQQk9IDA7DQoJVFJJU0IJPSAwOw0KDQoJVE1SMUwJPSAwOw0KCVRNUjFICT0gMDsNCg0K CUNDUFIxTAk9IDE7DQoJQ0NQUjFICT0gMDsNCg0KCUNDUDFDT04JPSAweDBhOw0KDQoJQ0NQMUlG CT0gMDsNCglDQ1AxSUUJPSAxOw0KDQoJUEVJRQk9IDE7DQoJR0lFCQk9IDE7DQoNCglUTVIxT04J PSAxOw0KDQoJLyogRml4ZWQgdmFsdWVzIGp1c3QgZm9yIHRlc3RpbmcgcHVycG9zZXMgKi8NCglC QU1WYWx1ZXNbMF0JPSAxMDsNCglCQU1WYWx1ZXNbMV0JPSAxMDA7DQoJQkFNVmFsdWVzWzJdCT0g MTI4Ow0KCUJBTVZhbHVlc1szXQk9IDEyNzsNCg0KDQoJLyogVGhlIHJlYWwgbWFpbiBwcm9ncmFt IHdpbGwgZG8gc29tZXRoaW5nICovDQoJd2hpbGUoIDEgKQ0KCQl7DQoJCUNMUldEVCgpOw0KCQl9 DQoJfQ0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCg== --_003_55E062692090609yahoocombr_ Content-Type: text/plain; name="ATT00001.txt" Content-Description: ATT00001.txt Content-Disposition: attachment; filename="ATT00001.txt"; size=224; creation-date="Fri, 28 Aug 2015 13:39:21 GMT"; modification-date="Fri, 28 Aug 2015 13:39:21 GMT" Content-Transfer-Encoding: base64 LS0gDQpodHRwOi8vd3d3LnBpY2xpc3QuY29tL3RlY2hyZWYvcGljbGlzdCBQSUMvU1ggRkFRICYg bGlzdCBhcmNoaXZlDQpWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBhdA0KaHR0 cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QNCg== --_003_55E062692090609yahoocombr_-- .